如何将表连接到自身并在SQL中选择最大值

Jak*_*nop 10 sql db2 ibm-midrange

我有一张contracts桌子:

contractId    date       price     partId
1             20120121   10        1
2             20110130   9         1
3             20130101   15        2
4             20110101   20        2
Run Code Online (Sandbox Code Playgroud)

合同最大的date是有效合同(不要责怪我,我责备创建xpps)

我需要创建查询以仅查看活动合同(每个部分一个合同,具有最高日期的合同).

所以查询的结果应该是这样的:

contractId    date       price     partId
1             20120121   10        1
3             20130101   15        2
Run Code Online (Sandbox Code Playgroud)

我在这里没有想法,我尝试自己加入表,我尝试了聚合功能,但我无法弄明白.如果有人有任何想法,请与我分享..

Joh*_*Woo 16

这将适用于几乎所有RDBM,

SELECT  a.*
FROM    tableName A
        INNER JOIN
        (
            SELECT partID, MAX(date) maxDate
            FROM    tableName
            GROUP BY partID
        ) B on a.partID = b.partID AND
                a.date = b.maxDate
Run Code Online (Sandbox Code Playgroud)

如果您的RDBMS支持Window Function,

SELECT  contractId ,date, price,partId
FROM    
(
    SELECT contractId ,date, price,partId,
            ROW_NUMBER() OVER (PARTITION BY PartID
                                ORDER BY date DESC) rn
    FROM    tableName
) s
WHERE   rn = 1
Run Code Online (Sandbox Code Playgroud)