一尘不染

汇总不同行中的值

sql

我有这张桌子的数据

ItemId  Value   Date
1        2      2017-12-18 17:00:00.000
1        2      2017-12-18 17:02:00.000
1        2      2017-12-18 17:04:00.000
1        3      2017-12-18 17:06:00.000
1        3      2017-12-18 17:08:00.000
1        2      2017-12-20 17:10:00.000
1        2      2017-12-20 17:12:00.000

我想在sql server中这样输出

ItemId     Value   MaxDate

1          2       2017-12-18 17:04:00.000
1          3       2017-12-18 17:08:00.000
1          2       2017-12-20 17:12:00.000

抱歉,我的称谓没有更好的句子


阅读 116

收藏
2021-05-16

共1个答案

一尘不染

这可以通过使用不同的行号方法来完成。查看内部查询的结果,该查询将具有相同值的连续行分类为一组,这些组可用于获取最终结果。

select itemid,value,max(date)
from (
select t.*,
row_number() over(partition by itemid order by date)
-row_number() over(partition by itemid,value order by date) as grp
from tbl t
) t
group by itemid,value,grp

编辑:刚得到minmax与戈登的答案会更容易。然而,如果两个minmaxsum且每组需要其他聚合,这个版本会更好。

2021-05-16