Использование подзапроса для поиска строк с максимальным значением даты - PullRequest
1 голос
/ 29 января 2020

У меня есть следующая таблица:

CREATE TABLE my_table 
(
    the_debt_id varchar(6) NOT NULL, 
    the_amount int NOT NULL, 
    the_debt_date date NOT NULL
)

INSERT INTO my_table
VALUES ('LMUS01', '200', '2/12/2019'), 
       ('LMUS01', '200', '2/11/2019'), 
       ('LMUS01', '300', '2/13/2019'), 
       ('LMUS02', '100', '2/10/2019'), 
       ('LMUS02', '150', '2/12/2019')

Я хочу строки из максимального значения the_date, сгруппированные по the_id, в этом случае:

'LMUS01','300','2/13/2019'
'LMUS02','150','2/12/2019'

Я пробовал следующий запрос:

SELECT * FROM my_table 
WHERE the_debt_date = (SELECT MAX(the_debt_date) 
FROM my_table GROUP BY the_debt_id)

Но ошибка, которую я получаю, это «более одной строки, возвращенной подзапросом, использованным в качестве выражения». Пожалуйста, будем благодарны за любую помощь.

Ответы [ 2 ]

2 голосов
/ 29 января 2020

В Postgres вы можете использовать удобное расширение distinct on для этого:

select distinct on (the_id) * from my_table order by the_id, the_date desc
1 голос
/ 29 января 2020
SELECT * FROM my_table 
WHERE the_debt_date in (SELECT MAX(the_debt_date) 
FROM my_table GROUP BY the_debt_id)

Используйте в , когда подзапрос возвращает более одной записи. Используйте = , если вы на 101% уверены, что подзапрос всегда будет возвращать только одну запись.

...