SQL - Возвращает столбец 1 и максимум столбца 2, если в столбце 1 есть несколько записей - PullRequest
0 голосов
/ 26 февраля 2020

У меня есть таблица с номерами счетов и датами (среди других столбцов). Для каждого номера счета есть несколько записей с разными датами. Я хочу вернуть только строку с самой последней датой и только те номера счетов, которые у меня есть из другого источника.

Это то, что я пробовал, но я понимаю, почему это не работает. Я просто не могу придумать альтернативный подход.

SELECT ACCOUNT_NUMBER, MAX(DATE) FROM PORTFOLIO
WHERE ACCOUNT_NUMBER IN (444347, 899999,
887111,
220922)
GROUP BY ACCOUNT_NUMBER 

Ответы [ 2 ]

1 голос
/ 26 февраля 2020

Я хочу вернуть только строку с самой последней датой и только номера счетов, которые у меня есть из другого источника.

Я понимаю, что вам нужна последняя запись для номера счета. Если это так, то одним из решений является использование функций analyti c:

select *
from (
    select
        p.*,
        rank() over(partition by account_number order by date desc) rn
    from portfolio p
    where account_number in (444347, 899999, 887111, 220922)
) t
where rn = 1

. Другой подход использует коррелированный подзапрос для фильтрации:

select p.*
from portfolio p
where 
    p.account_number in (444347, 899999, 887111, 220922)    
    and p.date = (
        select max(p1.date) from portfolio p1 where p1.account_number = p.account_number
    )
0 голосов
/ 26 февраля 2020
SELECT ACCOUNT_NUMBER, DATE
FROM PORTFOLIO
WHERE ACCOUNT_NUMBER IN (444347, 899999, 887111, 220922)
    and date = (select max(date) from portfolio b where portfolio.account_number = account_number)
...