Выберите от 2-й до последней записи для каждого идентификатора пользователя в таблице в Sqlite. - PullRequest
0 голосов
/ 14 июля 2020

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

  id_pk      user_id        mtg_date
+------ |------------|--------------------+
|   0   | LastFirst  | 2019-01-02 1:00:00 |
|   1   | LastFirst  | 2020-01-02 1:00:00 |
|   2   | LastFirst  | 2020-01-03 1:00:00 |
|   3   | LastFirst  | 2020-01-04 1:00:00 |
|   4   | JonesBob   | 2020-02-02 1:00:00 |
|   5   | JonesBob   | 2020-03-02 1:00:00 |
|   6   | JonesBob   | 2020-04-02 1:00:00 |
|   7   | JonesTom   | 2020-07-02 1:00:00 |
|   8   | JonesTom   | 2020-07-03 1:00:00 |
|   9   | JonesTom   | 2020-09-02 1:00:00 |
+------ |------------|--------------------+

Что я хочу получить:

  id_pk      user_id        mtg_date
+------ |------------|--------------------+
|   2   | LastFirst  | 2020-01-03 1:00:00 |
|   5   | JonesBob   | 2020-03-02 1:00:00 |
|   8   | JonesTom   | 2020-07-03 1:00:00 |
+------ |------------|--------------------+

Записи НЕ отсортировано по user_or или mtg_date, но добавлено, когда запланирована дата следующей встречи.

Я нашел это по другому вопросу, но не совсем понимаю его, и у меня это не работает. Кроме того, я делаю это в Python3 с Sqlite3.

            SELECT id_pk, user_id, Meeting_Date
            FROM Meetings
                    WHERE Meeting_Date IN (SELECT Meeting_Date
                    FROM Meetings AS T2
                    WHERE T2.id_pk = Meetings.id_pk
                    ORDER BY Meeting_Date DESC
                    LIMIT 3 OFFSET 1)        
                    """)

1 Ответ

1 голос
/ 14 июля 2020

Вы можете использовать функцию окна ROW_NUMBER().

Я хочу получить второе из последних на основе mtg_date

Итак, если дата определяет порядок, используйте его следующим образом:

select id_pk, user_id, mtg_date
from (
  select *, row_number() over (partition by user_id order by mtg_date desc, id_pk desc) rn
  from Meetings
)
where rn = 2;

См. Демонстрацию . Результатов:

| id_pk | user_id   | mtg_date           |
| ----- | --------- | ------------------ |
| 2     | LastFirst | 2020-01-03 1:00:00 |
| 5     | JonesBob  | 2020-03-02 1:00:00 |
| 8     | JonesTom  | 2020-07-03 1:00:00 |
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...