【发布时间】:2014-07-22 08:58:27
【问题描述】:
我有一个表,例如: session 是表的名称 有列:Id、sessionDate、user_id
我需要什么: Delta 应该是一个新的计算列
Id | sessionDate | user_id | Delta in days
------------------------------------------------------
1 | 2011-02-20 00:00:00 | 2 | NULL
2 | 2011-03-21 00:00:00 | 2 | NULL
3 | 2011-04-22 00:00:00 | 2 | NULL
4 | 2011-02-20 00:00:00 | 4 | NULL
5 | 2011-03-21 00:00:00 | 4 | NULL
6 | 2011-04-22 00:00:00 | 4 | NULL
Delta 是时间戳之间的差异 我想要的是前一行和当前行由 user_id 分组的 Delta Timestamp(以天为单位)的结果。
这应该是结果:
Id | sessionDate | user_id | Delta in Days
------------------------------------------------------
1 | 2011-02-20 00:00:00 | 2 | NULL
2 | 2011-02-21 00:00:00 | 2 | 1
3 | 2011-02-22 00:00:00 | 2 | 1
4 | 2011-02-20 00:00:00 | 4 | NULL
5 | 2011-02-23 00:00:00 | 4 | 3
6 | 2011-02-25 00:00:00 | 4 | 2
我已经有了针对特定 user_id 的解决方案:
SELECT user_id, sessionDate,
abs(DATEDIFF((SELECT MAX(sessionDate) FROM session WHERE sessionDate < t.sessionDate and user_id = 1), sessionDate)) as Delta_in_days
FROM session AS t
WHERE t.user_id = 1 order by sessionDate asc
但是对于更多 user_ids 我没有找到任何解决方案
希望有人可以帮助我。
【问题讨论】:
-
检查这个小提琴可能对你有帮助。sqlfiddle.com/#!2/6bf493/52。
标签: mysql sql timestamp datediff difference