Выбор последней строки для каждого клиента, которая соответствует этим параметрам - PullRequest
0 голосов
/ 26 марта 2019

У меня есть таблица SQL, в которой хранятся отчеты. У каждой строки есть customer_id и building_id, и когда у меня есть customer_id, мне нужно выбрать самую последнюю строку (самая последняя create_date) для каждого здания с этим customer_id.

report_id    customer_id    building_id    create_date
1            1              4              1553561789
2            2              5              1553561958
3            1              4              1553561999
4            2              5              1553562108
5            3              7              1553562755
6            3              8              1553570000

Я хотел бы получить обратно 3, 4, 5 и 6 идентификатора отчета.

Как мне запросить это? Я перепробовал несколько подвыборов и групп и не получил его на работу.

Ответы [ 2 ]

0 голосов
/ 26 марта 2019

Другой вариант:

SELECT a.*
  FROM myTable a
  WHERE a.create_date = (SELECT MAX(create_date)
                           FROM myTable b
                           WHERE b.customer_id = a.customer_id
                             AND b.building_id = a.building_id)

Можно попробовать выполнить поиск "эффективных записей с датами", чтобы увидеть различные подходы.

0 голосов
/ 26 марта 2019

Если вы используете MySQL 8+, тогда хорошим вариантом будет ROW_NUMBER:

WITH cte AS (
    SELECT *, ROW_NUMBER() OVER (PARTITION BY customer_id, building_id
                                 ORDER BY create_date DESC) rn
    FROM yourTable
)

SELECT
    report_id,
    customer_id,
    building_id,
    create_date
FROM cte
WHERE rn = 1;

Если к последней дате создания может быть привязано более одной пары клиент / здание, и вы хотите захватить все связи, замените ROW_NUMBER на RANK и используйте тот же запрос.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...