在sql server中查找第二条记录(如果可用,否则为最后一条记录)

时间:2015-07-24 09:11:05

标签: sql sql-server

我有一张像

这样的记录表

enter image description here

这里我想要Id 4和7以及9

在这里我想要每个第二个(如果它有很多)记录的细节。在上表中我想获取Id
(4表示ticketid 1001),
(ticketid 1002为7)和
(9表示ticketid 1003) 对于ticketid 1003,它应该获取id 9,因为它没有其他id。

2 个答案:

答案 0 :(得分:4)

使用sql-server 2005和更新版本,你可以使用这种方法:

WITH CTE AS
(
    SELECT ID, Status, TicketID,
           RN = ROW_NUMBER() OVER (PARTITION BY TicketID ORDER BY ID DESC),
           CNT = COUNT(*) OVER (PARTITION BY TicketID)
    FROM dbo.TableName t
)
SELECT ID, Status, TicketID
FROM CTE
WHERE CNT = 1 OR RN = 2

如果您不想使用类似于子查询/视图的common-table-expression:

SELECT x.ID, x.Status, x.TicketID
FROM ( SELECT ID, Status, TicketID,
              RN = ROW_NUMBER() OVER (PARTITION BY TicketID ORDER BY ID DESC),
              CNT = COUNT(*) OVER (PARTITION BY TicketID)
       FROM dbo.TableName t ) x
WHERE x.CNT = 1 OR x.RN = 2

答案 1 :(得分:0)

尝试以下操作,

为您的表生成序列号,然后在where子句中应用条件。

即。派生列名称%2 = 0

的位置

并请分享您的完整信息,这意味着您的数据是什么以及您从该输入中想要的内容。

所以我们会更清楚地解决您的问题并提供解决方案。

感谢。