选择MySQL中行日期之间的差异

时间:2011-09-10 23:35:22

标签: mysql sql

我想计算同一个表中不同行之间唯一日期字段的差异。

例如,给出以下数据:

   id | date
   ---+------------
    1 | 2011-01-01
    2 | 2011-01-02
    3 | 2011-01-15
    4 | 2011-01-20
    5 | 2011-01-10
    6 | 2011-01-30
    7 | 2011-01-03

我想生成一个产生以下内容的查询:

id | date       | days_since_last
---+------------+-----------------
 1 | 2011-01-01 | 
 2 | 2011-01-02 |  1
 7 | 2011-01-03 |  1
 5 | 2011-01-10 |  7
 3 | 2011-01-15 |  5
 4 | 2011-01-20 |  5
 6 | 2011-01-30 | 10

我会在MySQL中使用哪些日期函数的任何建议,或者是否有可以执行此操作的子选择?

(当然,我不介意让WHERE date > '2011-01-01'忽略第一行。)

2 个答案:

答案 0 :(得分:2)

这样的事情应该有效:

 SELECT mytable.id, mytable.date, DATEDIFF(mytable.date, t2.date)
 FROM mytable
 LEFT JOIN mytable AS t2 ON t2.id = table.id - 1

然而,这意味着你的id在你的桌子上是连续的,否则这根本不起作用。也许MySQL会抱怨第一行,因为t2.date将是null,但我现在没时间检查。

答案 1 :(得分:2)

相关的子查询可能会有所帮助:

SELECT
  id,
  date,
  DATEDIFF(
    (SELECT MAX(date) FROM atable WHERE date < t.date),
    date
  ) AS days_since_last
FROM atable AS t