我有像这张表这样的数据
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
对不起,我的标题没有得到更好的判决
答案 0 :(得分: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
编辑:戈登的回答让得到min
或max
会更容易。但是,如果每个组都需要min
,max
和sum
以及其他聚合,则此版本会更好。
答案 1 :(得分:1)
您希望下一行具有不同值的行:
onRowDataChanged
答案 2 :(得分:1)
不确定您是否正在尝试进行基本聚合,而您希望每天的最大日期时间值,或者您尝试在定义组的情况下执行岛屿和间隙问题,因为"之前"行更改值。但我认为你只需要基本的聚合。
这是一个完整的工作示例,它返回您想要的输出。
declare @Something table
(
ItemId int
, Value int
, [Date] datetime
)
insert @Something values
(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')
select ItemId
, Value
, MaxDate = Max([Date])
from @Something
group by ItemId
, Value
, convert(Date, [Date])
order by MAX([Date])