我希望只从数据集中检索第二个(重复)记录。例如,如下图所示:
在UnitID列中有105个单独的记录。我只希望返回的数据集返回第二个105记录。此外,我希望此查询返回所有重复项的第二条记录,而不仅仅是105。
我已经尝试了所有我能想到的东西,虽然我不是那种经历,我无法弄明白。任何帮助将不胜感激。
答案 0 :(得分:1)
您需要使用GROUP BY
。
以下是一个示例:(我无法读取您的第一个列名,因此我称之为JobUnitK
SELECT MAX(JobUnitK), Unit
FROM JobUnits
WHERE DispatchDate = 'oct 4, 2015'
GROUP BY Unit
HAVING COUNT(*) > 1
我假设JobUnitK
是您的订购/ ID字段。如果不是,请将MAX(JobUnitK)
替换为MAX(FieldIOrderWith)
。
答案 1 :(得分:1)
假设SQL Server 2005及更高版本,您可以使用Row_Number
windowing function:
WITH DupeCalc AS (
SELECT
DupID = Row_Number() OVER (PARTITION BY UnitID, ORDER BY JobUnitKeyID),
*
FROM JobUnits
WHERE DispatchDate = '20151004'
ORDER BY UnitID Desc
)
SELECT *
FROM DupeCalc
WHERE DupID >= 2
;
这比使用Max(JobUnitKeyID)
的解决方案更好,原因有多种:
Min(JobUnitKeyID)
与UnitID
结合使用UnitID
加入JobUnitKeyID
<> MinJobUnitKeyID`是必需的。Min
或Max
要求您加入相同的数据(这本身就会更慢)。Min
或Max
的查询会在复杂性方面爆炸。答案 2 :(得分:1)
使用RANK
功能。对行OVER
PARTITION BY UnitId进行排名,并选择排名为2的行。
供参考 -