【问题标题】:how to difference of row numbers approach如何区分行号方法
【发布时间】:2017-12-19 13:03:10
【问题描述】:

我有类似这张表的数据

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-18 17:10:00.000
1        2      2017-12-18 17:12:00.000
1        2      2017-12-18 17:16:00.000
1        4      2017-12-18 17:14: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-18 17:16:00.000
1          4       2017-12-18 17:14:00.000

感谢您的回答。

【问题讨论】:

  • 你输出的逻辑是什么?
  • 我认为您的示例数据的最后一行是错误的?
  • 为什么 tupla itemid,value(1,2) 有两个最大日期?价值 4 从何而来?
  • 我编辑了我的问题 MiloBellano
  • @HoseinMasoomi - 为什么1,4,'2017-12-18 17:14:00.000' 位于末尾?它的日期比之前的行早 2 分钟...

标签: sql sql-server sql-server-2016


【解决方案1】:

您似乎想要value 更改之前的最后一行,尽管我不确定值“4”的来源(我最好的猜测是最后一个输入行应该有一个“4”和不同的时间戳) .

如果是这样,您可以简单地使用lead()

select t.*
from (select t.*,
             lead(value) over (partition by itemId order by date) as next_value
      from t
     ) t
where next_value is null or next_value <> value;

【讨论】:

  • 该值4 可能非常重要。因为样本数据的最后两行不是时间戳顺序,所以结果也不是时间戳顺序。在澄清之前,如果没有附加字段来强制执行相对顺序,这可能无法解决。
猜你喜欢
  • 2016-02-13
  • 1970-01-01
  • 2017-08-11
  • 2017-03-10
  • 1970-01-01
  • 1970-01-01
  • 2010-10-16
  • 2012-11-25
  • 2012-10-19
相关资源
最近更新 更多