11

私はcontractsテーブルを持っています:

contractId    date       price     partId
1             20120121   10        1
2             20110130   9         1
3             20130101   15        2
4             20110101   20        2

最大の契約dateはアクティブな契約です(私を責めないでください、私はxppsを作成するためのインフォアを責めます)

アクティブな契約のみを表示するクエリを作成する必要があります(パーツごとに1つの契約、最も日付の高い契約)。

したがって、クエリの結果は次のようになります。

contractId    date       price     partId
1             20120121   10        1
3             20130101   15        2

私はここでアイデアがありません。テーブルに自己結合してみました。集計関数を試しましたが、理解できません。誰かが何か考えを持っているなら、私とそれらを共有してください。

4

2 に答える 2

18

これは、ほぼすべての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

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
于 2012-11-29T17:04:00.493 に答える
3
SELECT c.*
FROM contracts c
    INNER JOIN 
    (
        SELECT partId, MAX([date]) AS MaxDate
        FROM contracts
        GROUP BY partID
    ) MaxDate
        ON c.partId = MaxDate.partID
            AND c.[date] = MaxDate.[date]
于 2012-11-29T17:07:21.217 に答える