Нахождение разницы между двумя строками в SQL и присвоение ей числового значения (SQLite)

#sql #sqlite

#sql #sqlite

Вопрос:

У меня есть таблица

Имя login_time
Джон 2021-01-02 08:10:52
Джон 2021-01-02 11:55:01
Джон 2021-01-04 17:36:22
Эми 2021-01-02 10:12:48
Эми 2021-01-06 11:22:41
Эми 2021-01-06 19:05:07

Я хочу добавить столбец usage_days. Если тот же пользователь входит в систему в тот же день, что и в прошлый раз, он считается тем же днем. Результирующий столбец должен выглядеть примерно так:

Имя login_time использование_дни
Джон 2021-01-02 08:10:52 1
Джон 2021-01-02 11:55:01 1
Джон 2021-01-04 17:36:22 2
Эми 2021-01-02 10:12:48 1
Эми 2021-01-06 11:22:41 2
Эми 2021-01-06 19:05:07 2

Комментарии:

1. используйте оконную функцию для подсчета

Ответ №1:

Возможно, нам потребуется знать вашу точную базу данных, чтобы получить точный ответ, но, вероятно, сработает следующее:

 SELECT name, login_time,
       DENSE_RANK() OVER (PARTITION BY name ORDER BY CAST(login_time AS date)) usage_days
FROM yourTable
ORDER BY name, login_time;
 

Комментарии:

1. Я использую SQLite. Какие изменения мне нужны, если бы я рассматривал вход в систему в течение 4 часов с момента последнего входа в систему как тот же usage_period ?

2. @Carlos Я понятия не имею, как это сделать в SQLite, который имеет плохую поддержку даты. Но … это не тот вопрос, который вы задали. На то, что вы спросили, я ответил выше.