我想计算同一个表中不同行之间唯一日期字段的差异。
例如,给出以下数据:
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'
忽略第一行。)
答案 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