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

标签 sql sql-server

我有一个记录如下的表

enter image description here

这里我要 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/

相关文章:

sql - oracle 中的合并语句帮助

sql - Postgresql 分区和 FK

sql - TSQL - 递归 CTE 效率低下 - 需要替代方案

php - 在执行双插入时将一个表中的值插入到另一个表中

.net - 是否可以在多个程序之间共享 SQL Server 事务?

sql - 相当于 Amazon Redshift 中的 T-SQL 表值构造函数?

sql - PostgreSQL 更新不返回零计数

sql - 联合两个选择基于某些列(而不是整行)删除重复项

sql-server - 如何将 IDENTITY 属性添加到现有的 SQL Azure 表中?

sql-server - 为什么没有数据插入时会调用插入触发器?