Я хочу получить первый счет по дате каждого po_distribution_id и его данным:
SELECT UNIQUE
first_value(i.invoice_id) OVER (PARTITION BY po_distribution_id ORDER BY i.invoice_date asc) invoice_id
,first_value(i.invoice_date) OVER (PARTITION BY po_distribution_id ORDER BY i.invoice_date asc) invoice_date
,first_value(i.invoice_num) OVER (PARTITION BY po_distribution_id ORDER BY i.invoice_date asc) invoice_date
FROM AP_INVOICE_DISTRIBUTIONS_ALL d LEFT JOIN ap_invoices_all i on d.invoice_id = i.invoice_id
WHERE sysdate - i.invoice_date < 30
ORDER BY invoice_id DESC
Интересно, есть ли лучший способ выполнить это, не используя так много first_value. Запрос не медленный, но я чувствую себя неловко с ним.
Пример:
po_distribution_id invoice_id invoice_date
212121 2212 2019-05-05
212121 2355 2019-01-09
212121 1122 2019-02-02
212121 7744 2019-03-04
Должен вернуть:
po_distribution_id invoice_id invoice_date
212121 2355 2019-01-09