我在SQLite表中有数据如下所示:
user_id event_date
---------- ----------
1000001 2008-01-01
1000001 2008-03-13
1000001 2008-07-04
1000002 2007-01-06
1000002 2008-01-01
1000002 2009-06-01
1000002 2010-12-11
对于user_id
中的每一个,我想选择连续event_date
对之间的最大时间间隔。例如,在此特定数据中,用户1000001有两个差距:2008-01-01和2008-03-13之间的72天,以及2008-03-13和2008-07-04之间的113天,因此查询应输出113对于用户1000001.用户1000002有三个间隙;最大的是558天。
这可能吗?我是否必须预先计算时间跨度并将其与数据一起存储,或者选择所有内容并发布流程?我希望能够直接使用所显示的数据并直接在数据库中完成。我是否因为期望能够将这些数据作为列表处理而滥用SQL? 感谢。
答案 0 :(得分:1)
如果您无法更改数据模型,可以使用:
SELECT user_id, MAX(event_date - prior_event_date)
FROM (SELECT t.user_id, t.event_date, MAX(prior.event_date) AS prior_event_date
FROM your_table AS t
JOIN your_table AS prior ON (t.user_id=prior.user_id
AND prior.event_date < t.event_date)
GROUP BY t.user_id, t.event_date) AS events
GROUP BY user_id;
如果要包含0,请使用LEFT JOIN
。