Разница дат между двумя отдельными строками в SQLite без идентификатора - PullRequest
0 голосов
/ 07 сентября 2018

У меня есть такие данные в SQLite (несколько тысяч строк):

1536074432|startRecording
1536074434|stopRecording
1536074443|startRecording
1536074447|stopRecording
1536074458|startRecording
1536074462|stopRecording

И я хотел бы получить количество секунд, прошедших между двумя последовательными различными событиями (в основном, сколько секунд видео, которое я записал).

Я знаю о другом подобном вопросе ( Дата Разница между последовательными строками ), но в моем случае она другая, потому что я не могу получить «следующую» строку по идентификатору, но мне нужно получить ее на основе другого имени события.

Есть ответ, который работает волшебно, но он специфичен для SQL Server ( Запрос, чтобы найти разницу во времени между последовательными событиями ), и мне это нужно для SQLite.

Я мог бы сделать это в Oracle с функциями LAG / LEAD, но не представлял, как это сделать в SQLite.

Я мог бы также сделать это с помощью отдельного сценария синтаксического анализа, но я думаю, что было бы более эффективно сделать это непосредственно из запроса.

1 Ответ

0 голосов
/ 07 сентября 2018

Даже если в таблице нет id, sqlite сохраняет идентификатор строки ( из sqlite CREATE_TABLE doc ):

ROWID и INTEGER ПЕРВИЧНЫЙ КЛЮЧ
За исключением таблиц WITHOUT ROWID, все строки в таблицах SQLite имеют 64-разрядный целочисленный ключ со знаком, который однозначно идентифицирует строку в своей таблице. Это целое число обычно называют «rowid». Доступ к значению rowid можно получить с помощью одного из специальных независимых от регистра имен «rowid», «oid» или « rowid » вместо имени столбца. Если таблица содержит определенный пользователем столбец с именами «rowid», «oid» или « rowid », то это имя всегда ссылается на явно объявленный столбец и не может использоваться для получения целочисленного значения rowid.

Предполагая, что данные идеально чистые, как описано :) как насчет:

select a.rowid,a.time,a.event,b.rowid,b.time,b.event,b.time - a.time as elapsed --,sum(b.time-a.time)
from t2 a, t2 b
where a.rowid % 2 = 1
and b.rowid = a.rowid + 1
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...