评估SQLite中的连续行对

时间:2010-10-19 19:24:56

标签: sql sqlite

我在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? 感谢。

1 个答案:

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