我有一个记录如下的表
这里我要 Id 4 和 7 和 9
在此我想要每第二个(如果有很多)记录的详细信息。在上表中我想获取 Id
(4 个用于 ticketid 1001),
(7 为 ticketid 1002)和
(票号 1003 为 9)。
对于 ticketid 1003,它应该获取 id 9,因为它没有其他 id。
最佳答案
对于 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
如果您不想使用类似于子查询/ View 的公用表表达式:
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
关于sql - 在 sql server 中查找第二条最后记录(如果可用,否则为最后一条记录),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31606541/