我下面有一张这样的桌子
表1
+----+---------------------------+
| Id | Date |
+----+---------------------------+
| 12 | 2019-04-20 12:35:00.000 |
| 2 | 2019-04-20 12:55:00.000 |
| 11 | 2019-04-20 11:57:00.000 |
| 7 | 2019-04-20 12:00:00.000 |
| 5 | 2019-04-20 12:05:00.000 |
+----+---------------------------+
我想获得如下输出
+----+-------------------------+-------+
| Id | Date | Diff |
+----+-------------------------+-------+
| 12 | 2019-04-20 12:35:00.000 | NULL |
| 2 | 2019-04-20 12:55:00.000 | 00:20 |
| 11 | 2019-04-20 11:57:00.000 | 23:02 |
| 7 | 2019-04-20 12:00:00.000 | 00:03 |
| 5 | 2019-04-20 12:05:00.000 | 00:05 |
+----+-------------------------+-------+
我尝试了以下查询;
SELECT id, Date,
DATEDIFF((SELECT MAX(Date) FROM Event
WHERE Date < t.Date), Date ) AS days_since_last
FROM Event AS t;
请帮助任何人帮助我。 预先感谢
答案 0 :(得分:0)
DATEDIFF
返回两个日期之间的天差。如果要查找时差,请使用TIMEDIFF
:
SELECT id, DATE,
TIMEDIFF((SELECT MAX(DATE) FROM Event),DATE) AS days_since_last
FROM Event AS t;
我还从WHERE Date < t.Date
中删除了SELECT MAX(Date) FROM Event WHERE Date < t.Date
。因为如果我理解正确,那么您想要的是最近时间与先前时间之间的时差,对吗?如果没有,请告诉我,我将相应地更新答案。
谢谢。
更新:因此,我最初的理解是错误的(再次..),事实证明子查询是正确的。在这种情况下,我对OP的原始查询只有两个更改:
SELECT id, DATE,
TIMEDIFF(DATE,(SELECT MAX(DATE) FROM Event
WHERE DATE < t.Date)) AS days_since_last
FROM Event AS t;
我只将DATEDIFF
更改为TIMEDIFF
,并将日期的顺序更改为TIMEDIFF(date1,date2)
。