获取特定列分组的最大序列号
get the max sequence number of a specific column grouping
正如标题所说,我如何 select 具有每个 AssetCode 分组的最大序列号的行。
我尝试了 IN
子句运算符,但它不会占用两列。
AssetCode SeqNo
---------------------------
AWET-2015-00001 1
AWET-2015-00001 2
AWET-2015-00001 3
AWET-2015-00001 4
AWET-2015-00002 1
AWET-2015-00002 2
AWET-2015-00002 3
代码:
SELECT *
FROM E_FixedAssetLedger
WHERE Fal_AssetCode, Fal_SeqNo IN (SELECT Fal_AssetCode, MAX(Fal_SeqNo)
FROM E_FixedAssetLedger
GROUP BY Fal_AssetCode)
我们可以尝试使用JOIN
的聚合函数子查询来实现。
SELECT f.*
FROM E_FixedAssetLedger f
INNER JOIN (
SELECT Fal_AssetCode,Max(Fal_SeqNo) Fal_SeqNo
FROM E_FixedAssetLedger
GROUP BY Fal_AssetCode
) fa ON f.Fal_AssetCode = fa.Fal_AssetCode
AND f.Fal_SeqNo = fa.Fal_SeqNo
如果您的 RDBMS 支持 window 函数,我们可以尝试使用 ROW_NUMBER
window 函数来获取 Max(SeqNo)
每个 AssetCode
SELECT *
FROM (
SELECT *,
ROW_NUMBER() OVER(PARTITION BY AssetCode ORDER BY SeqNo DESC) rn
FROM E_FixedAssetLedger
) t1
WHERE rn = 1
正如标题所说,我如何 select 具有每个 AssetCode 分组的最大序列号的行。
我尝试了 IN
子句运算符,但它不会占用两列。
AssetCode SeqNo
---------------------------
AWET-2015-00001 1
AWET-2015-00001 2
AWET-2015-00001 3
AWET-2015-00001 4
AWET-2015-00002 1
AWET-2015-00002 2
AWET-2015-00002 3
代码:
SELECT *
FROM E_FixedAssetLedger
WHERE Fal_AssetCode, Fal_SeqNo IN (SELECT Fal_AssetCode, MAX(Fal_SeqNo)
FROM E_FixedAssetLedger
GROUP BY Fal_AssetCode)
我们可以尝试使用JOIN
的聚合函数子查询来实现。
SELECT f.*
FROM E_FixedAssetLedger f
INNER JOIN (
SELECT Fal_AssetCode,Max(Fal_SeqNo) Fal_SeqNo
FROM E_FixedAssetLedger
GROUP BY Fal_AssetCode
) fa ON f.Fal_AssetCode = fa.Fal_AssetCode
AND f.Fal_SeqNo = fa.Fal_SeqNo
如果您的 RDBMS 支持 window 函数,我们可以尝试使用 ROW_NUMBER
window 函数来获取 Max(SeqNo)
每个 AssetCode
SELECT *
FROM (
SELECT *,
ROW_NUMBER() OVER(PARTITION BY AssetCode ORDER BY SeqNo DESC) rn
FROM E_FixedAssetLedger
) t1
WHERE rn = 1