Я пытался выяснить, как подойти к следующему:
У меня есть таблица registrations
:
+---------+---------------------+
| user_id | reg_date |
+---------+---------------------+
| a | 2018-11-01 20:47:46 |
| b | 2018-11-02 21:07:15 |
| c | 2018-11-03 05:24:31 |
+---------+---------------------+
И таблица с logins
:
+---------+---------------------+
| user_id | login_date |
+---------+---------------------+
| a | 2018-11-01 21:30:46 |
| a | 2018-11-01 21:35:15 |
| a | 2018-11-01 22:22:22 |
| ... | |
+---------+---------------------+
Поэтому мне нужно получить пользователей, которые хотя бы один раз регистрировались в течение дня после регистрации (между 24 и 48 часами после регистрации) и отображать user_id
, register_date
и самое высокое значение для входа во второй день.
Я получил следующее решение:
WITH a
AS (SELECT registrations.user_id,
registrations.reg_date,
logins.login_date,
Row_number()
OVER(
partition BY registrations.user_id
ORDER BY logins.login_date DESC) row_num
FROM registrations
INNER JOIN logins
ON registrations.user_id = logins.user_id
WHERE logins.login_date BETWEEN Hours_add(registrations.reg_date, 24)
AND
Hours_add(registrations.reg_date, 48))
SELECT *
FROM a
WHERE row_num = 1
Но я не уверен насчет своего решения, хотя оно выглядит хорошо.Не могли бы вы проверить это и предложить более простой способ рассчитать это?