SQL获取第二条记录

时间:2015-10-05 18:57:36

标签: sql-server

我希望只从数据集中检索第二个(重复)记录。例如,如下图所示:

enter image description here

在UnitID列中有105个单独的记录。我只希望返回的数据集返回第二个105记录。此外,我希望此查询返回所有重复项的第二条记录,而不仅仅是105。

我已经尝试了所有我能想到的东西,虽然我不是那种经历,我无法弄明白。任何帮助将不胜感激。

3 个答案:

答案 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`是必需的。
  • 除了使用MinMax要求您加入相同的数据(这本身就会更慢)。
  • 如果您使用的订购密钥不是唯一的,那么您将无法使用任何一行提取正确的行数。
  • 如果排序键包含多个列,则使用MinMax的查询会在复杂性方面爆炸。

答案 2 :(得分:1)

使用RANK功能。对行OVER PARTITION BY UnitId进行排名,并选择排名为2的行。

供参考 -

https://msdn.microsoft.com/en-IN/library/ms176102.aspx