如何在MYSQL中获得日期行差异

时间:2019-04-29 03:32:43

标签: mysql

我下面有一张这样的桌子

表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;

请帮助任何人帮助我。 预先感谢

1 个答案:

答案 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)