Разница во времени между строками результата запроса в SQLite: как? - PullRequest
1 голос
/ 21 июня 2011

Рассмотрим следующее reviews содержимое таблицы:

CustomerName    ReviewDT
Doe,John        2011-06-20 10:13:24
Doe,John        2011-06-20 10:54:45
Doe,John        2011-06-20 11:36:34
Doe,Janie       2011-06-20 05:15:12

Результаты упорядочены по ReviewDT и сгруппированы по CustomerName, например:

SELECT
  CustomerName,
  ReviewDT
FROM
  Reviews
WHERE
  CustomerName NOT NULL
ORDER BY CustomerName ASC, ReviewDT ASC;

Я хотел бы создать столбец разницы во времени между каждой строкой этого запроса для каждого клиента ... rowid дает исходную строку, и нет шаблона для включения из rowid и т. Д. *

Для 1-й записи для CustomerName значение будет равно 0. Я спрашиваю здесь, если это то, что можно как-то рассчитать как часть исходного запроса. Если нет, то я планировал сделать это с помощью ряда запросов - сначала создав новую таблицу TABLE, выбрав результаты запроса выше, - затем изменив, чтобы добавить новый столбец, и используя UPDATE / strftime, чтобы получить разницу во времени, используя rowid-1. (как-то) ...

1 Ответ

3 голосов
/ 21 июня 2011

Для вычисления секунд, прошедших от одной строки ReviewDT до следующей:

 SELECT q.CustomerName, q.ReviewDT,
   strftime('%s',q.ReviewDT) 
   - strftime('%s',coalesce((select r.ReviewDT from Reviews as r
                       where r.CustomerName = q.CustomerName
                       and r.ReviewDT < q.ReviewDT
                       order by r.ReviewDT DESC limit 1), 
                       q.ReviewDT))
  FROM Reviews as q WHERE q.CustomerName NOT NULL 
  ORDER BY q.CustomerName ASC, q.ReviewDT ASC;

Чтобы получить DT каждой ReviewDT и предшествующей CustomerName строки:

SELECT q.CustomerName, q.ReviewDT,
  coalesce((select r.ReviewDT from Reviews as r
                      where r.CustomerName = q.CustomerName
                      and r.ReviewDT < q.ReviewDT
                      order by r.ReviewDT DESC limit 1), 
                      q.ReviewDT)
 FROM Reviews as q WHERE q.CustomerName NOT NULL 
 ORDER BY q.CustomerName ASC, q.ReviewDT ASC;
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...