我有一个contracts
表:
contractId date price partId
1 20120121 10 1
2 20110130 9 1
3 20130101 15 2
4 20110101 20 2
最大date
的合同是有效合同(不要怪我,我责备创建xpps)
我需要创建查询以仅查看有效合约(每个部分一个合约,最高日期合约)。
所以查询的结果应该是这样的:
contractId date price partId
1 20120121 10 1
3 20130101 15 2
我在这里没有想法,我尝试自己加入表格,我尝试了聚合功能,但我无法弄明白。如果有人有任何想法,请与我分享..
答案 0 :(得分: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
如果您的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
答案 1 :(得分: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]