#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, который имеет плохую поддержку даты. Но … это не тот вопрос, который вы задали. На то, что вы спросили, я ответил выше.