SQL, запрос для проверки и перечисления различных записей, которые встречаются в другой таблице в течение определенного c периода времени - PullRequest
0 голосов
/ 21 января 2020

Я использую Oracle.

У меня есть две таблицы. Один содержит пользователей, а другой - своего рода журнал доступа. Мне нужно перечислить всех пользователей, чья последняя запись в журнале появляется в журнале в течение определенного периода времени, включая отметку времени последней записи. Один пользователь может иметь несколько записей в журнале.

Вот упрощенные версии таблиц:

Пользователи

|----------------------------------|
| userid| username | name          |
|----------------------------------|
| 1     | josm     | John Smith    |
| 2     | lajo     | Laura Jones   |
| 3     | miwi     | Mike Williams |
| 4     | subo     | Susan Brown   |
| 5     | peda     | Peter Davis   |
| 6     | jami     | Jane Miller   |
|----------------------------------|

Журнал

|----------------------------------|
| userid| action   | timestamp     |
|----------------------------------|
| 3     | a        | 20-01-2020    |
| 2     | v        | 19-11-2019    |
| 2     | y        | 02-11-2019    |
| 4     | b        | 15-09-2019    |
| 1     | a        | 23-05-2019    |
| 6     | y        | 22-05-2019    |
| 3     | b        | 16-04-2019    |
| 2     | a        | 07-01-2019    |
| 5     | v        | 18-11-2018    |
| 6     | a        | 12-09-2018    |
|----------------------------------|

Желаемый результат, если срок установлен на шесть месяцев:

|---------------------------------------|
| username | name          | timestamp  |
|--------------------------|------------|
| miwi     | Mike Williams | 20-01-2020 |
| lajo     | Laura Jones   | 19-11-2019 |
| subo     | Susan Brown   | 15-09-2019 |
|---------------------------------------|

Любая помощь будет принята с благодарностью.

1 Ответ

0 голосов
/ 21 января 2020

Вы можете использовать агрегацию:

select u.username, u.userid, max(l.timestamp)
from logs l join
     users u
     on l.userid = u.userid
group by u.username, u.userid
having max(l.timestamp) >= add_months(sysdate, -6)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...