【发布时间】:2019-04-30 17:01:12
【问题描述】:
我有一个类似的数据集
+----+------------+------------+------------+
| ID | Udate | last_code | Ddate |
+----+------------+------------+------------+
| 1 | 05/11/2018 | ACCEPTED | 13/10/2018 |
| 1 | 03/11/2018 | ATTEMPT | 13/10/2018 |
| 1 | 01/11/2018 | INFO | 13/10/2018 |
| 1 | 22/10/2018 | ARRIVED | 13/10/2018 |
| 1 | 15/10/2018 | SENT | 13/10/2018 |
+----+------------+------------+------------+
我正在尝试获取 Udate 上每个代码的日期差异,但对于第一个日期,我想在 Udate 和 Ddate 之间进行日期差异。
所以我一直在尝试:
DATEDIFF(DAY,LAG(Udate) OVER (PARTITION BY Shipment_Number ORDER BY Udate), Udate)
要获取日期之间的差异并且到目前为止它有效,但我还需要 Udate 和 Ddate 之间的第一个日期差异。
我在想ISNULL()
另外,最后我还需要代码之间的平均天数,通常它们保持相同的模式。样本输出数据:
+----+------------+------------+------------+------------+
| ID | Udate | last_code | Ddate | Difference |
+----+------------+------------+------------+------------+
| 1 | 05/11/2018 | ACCEPTED | 13/10/2018 | 2 |
| 1 | 03/11/2018 | ATTEMPT | 13/10/2018 | 2 |
| 1 | 01/11/2018 | INFO | 13/10/2018 | 10 |
| 1 | 22/10/2018 | ARRIVED | 13/10/2018 | 7 |
| 1 | 15/10/2018 | SENT | 13/10/2018 | 2 |
+----+------------+------------+------------+------------+
请注意,当没有之前的代码时,日期差异在 Udate 和 Ddate 之间。
任何想法都将不胜感激。
谢谢。
【问题讨论】:
-
你能提供样本输出数据吗?
-
是的,对不起。现已编辑
-
你能澄清一下“另外,最后我需要平均代码之间的天数” 是什么意思吗?是否有一些额外的部分需要解决。我打算为您提供的结果提供一个答案,但老实说,它只是将您已经表达的想法形式化 - 使用 `IsNull(LAG(Udate) OVER (PARTITION BY Shipment_Number ORDER BY Udate), Ddate)!
-
“我在想
ISNULL()”——这个想法很好,你试过了吗?
标签: sql-server tsql average lag datediff