如何根据最新日期/记录在 PSQL 中选择不同的记录?

问题描述 投票:0回答:1

我在 PostgreSQL 中有一个连接多个表的查询,但是一个表 (TABLE_D) 每个表有多个记录,我只想根据表中的单个字段 (DATE_ACTION) 提取最新记录。因此,在此处的示例中,我只想提取绿色框内的记录,因为该记录显示最新的 DATE_ACTION 值。我试图弄清楚如何设置查询以仅提取这一条记录,而不应显示其他四条记录。 enter image description here

以下是我的基本查询。我尝试将 DISTINCT 添加到 Select 语句,但这不起作用。我想要基于 ORDER_NO、RECORD_NO、PART、MUST_DLVR_BY_DATE、JOB 和 SUFFIX 的不同记录。然后附上,我想看看最近的 DATE_ACTION 值。

select A.ORDER_NO, A.RECORD_NO, B.PART,  A.MUST_DLVR_BY_DATE, C.JOB, C.SUFFIX, D.DATE_ACTION, A.DATE_SHIPPED
from TABLE_A A
inner join TABLE_B B on A.ORDER_NO=B.ORDER_NO and A.RECORD_NO=B.RECORD_NO
inner join TABLE_C C on A.ORDER_NO=C.SALES_ORDER and left(A.RECORD_NO,3)=C.SALES_ORDER_LINE
left join TABLE_D D on C.JOB=D.JOB and C.SUFFIX=D.SUFFIX
where  B.DATE_SHIP in ('','000000') and D.DATE_ACTION <>'' and A.must_dlvr_by_date <> '00000000' and D.code_transaction = 'J52'
order by A.ORDER_NO, A.RECORD_NO, D.DATE_ACTION DESC
sql postgresql greatest-n-per-group
1个回答
0
投票

您可以尝试使用 DISTINCT ON 子句和 ORDER BY 子句来对记录进行排序。像这样的东西:

SELECT DISTINCT ON (A.ORDER_NO, A.RECORD_NO)
    A.ORDER_NO, 
    A.RECORD_NO, 
    B.PART, 
    A.MUST_DLVR_BY_DATE, 
    C.JOB, 
    C.SUFFIX, 
    D.DATE_ACTION, 
    A.DATE_SHIPPED
FROM TABLE_A A
INNER JOIN TABLE_B B ON A.ORDER_NO = B.ORDER_NO AND A.RECORD_NO = B.RECORD_NO
INNER JOIN TABLE_C C ON A.ORDER_NO = C.SALES_ORDER AND LEFT(A.RECORD_NO, 3) = C.SALES_ORDER_LINE
LEFT JOIN TABLE_D D ON C.JOB = D.JOB AND C.SUFFIX = D.SUFFIX
WHERE B.DATE_SHIP IN ('', '000000')
    AND D.DATE_ACTION <> ''
    AND A.must_dlvr_by_date <> '00000000'
    AND D.code_transaction = 'J52'
ORDER BY A.ORDER_NO, A.RECORD_NO, D.DATE_ACTION DESC;
© www.soinside.com 2019 - 2024. All rights reserved.