栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 面试经验 > 面试问答

如何与列名称一起获得最高的值

面试问答 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

如何与列名称一起获得最高的值

XML具有处理通用查询的强大能力:

DECLARE @tbl TABLE(ID INT IDENTITY,d1 DATE, d2 DATE, d3 DATE);INSERT INTO @tbl VALUES ('20180101','20180102','20180103')  --one max value,('20170101','20190102','20190102'); --two max valuesSELECt TOP 1 WITH TIES       t.ID       ,y.value('text()[1]','date') d      ,y.value('local-name(.)','varchar(100)') cFROM @tbl tCROSS APPLY(SELECT d1,d2,d3 FOR XML PATH('d'),TYPE) A(x)CROSS APPLY x.nodes('/d/*') B(y) ORDER BY DENSE_RANK() OVER(PARTITION BY ID ORDER BY y.value('text()[1]','date') DESC);

更新:一些解释

第一个

CROSS APPLY
将创建一个如下所示的XML:

<d>  <d1>2018-01-01</d1>  <d2>2018-01-02</d2>  <d3>2018-01-03</d3></d>

第二个

CROSS APPLY
用于
.nodes()
返回中的所有节点
<d>
。通过
.value()
我们可以获得元素的名称(
local-name()
)及其内容。

有诀窍

DENSE_RANK
,并
TOP 1 WITH TIES
返回其获得的所有行
1
(这是每个ID最高)。



转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/456249.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号