我有一个付款记录表,里面有合同号,付款日期,我要获取不是最后一次付款的的合同信息,如何写查询SQL。
要获取每个合同不是最后一次付款的信息,你可以使用窗口函数和子查询来实现。假设你有一个名为 payment_records
的表,包含合同号 contract_number
和付款日期 payment_date
,可以这样写查询:
SELECT contract_number, payment_date
FROM (
SELECT contract_number,
payment_date,
ROW_NUMBER() OVER (PARTITION BY contract_number ORDER BY payment_date DESC) AS row_num,
COUNT(*) OVER (PARTITION BY contract_number) AS total_payments
FROM payment_records
) AS subquery
WHERE row_num < total_payments;
这个查询首先为每个合同号按照付款日期进行降序排列,然后为每个合同号分配一个行号 row_num
,并计算每个合同号的总付款次数 total_payments
。最后,外部查询选取了行号不等于总付款次数的记录,这样就得到了每个合同号除了最后一次付款之外的付款信息。