我正在研究一些 PostgreSQL,以获取某些日期之间每个月的前 10 张和最后 10 张发票。我在横向连接中有意外的输出。首先,限制不起作用,每个array_agg
聚合返回数百行而不是限制为 10 行。其次,聚合看起来是相同的,即使一个是有序ASC
的,另一个是DESC
。
如何仅检索每个月组的前 10 张和后 10 张发票?
SELECT first.invoice_month,
array_agg(first.id) first_ten,
array_agg(last.id) last_ten
FROM public.invoice i
JOIN LATERAL (
SELECT id, to_char(invoice_date, 'Mon-yy') AS invoice_month
FROM public.invoice
WHERE id = i.id
ORDER BY invoice_date, id ASC
LIMIT 10
) first ON i.id = first.id
JOIN LATERAL (
SELECT id, to_char(invoice_date, 'Mon-yy') AS invoice_month
FROM public.invoice
WHERE id = i.id
ORDER BY invoice_date, id DESC
LIMIT 10
) last on i.id = last.id
WHERE i.invoice_date BETWEEN date '2017-10-01' AND date '2018-09-30'
GROUP BY first.invoice_month, last.invoice_month;