Оценивать последовательные пары строк в SQLite - PullRequest
3 голосов
/ 19 октября 2010

У меня есть данные в таблице 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 имеет два пробела: 72 дня между 2008-01-01 и 2008-03-13 и 113 дней между 2008-03-13 и 2008-07-04, поэтому запрос должен вывести 113для пользователя 1000001. Пользователь 1000002 имеет три пробела;самый большой 558 дней.

Возможно ли это?Должен ли я предварительно рассчитать промежутки времени и сохранить их вместе с данными, или выбрать все и опубликовать процесс?Я хотел бы иметь возможность сделать это напрямую только с данными, как показано, и непосредственно в базе данных.Злоупотребляю ли я SQL, ожидая, что он сможет обрабатывать эти данные как список?
Спасибо.

1 Ответ

1 голос
/ 20 октября 2010

Если вы не можете изменить модель данных, вы можете использовать:

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.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...