Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/67.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/sql-server/25.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
在sql server中查找倒数第二条记录(如果可用,则查找倒数第二条记录)_Sql_Sql Server - Fatal编程技术网

在sql server中查找倒数第二条记录(如果可用,则查找倒数第二条记录)

在sql server中查找倒数第二条记录(如果可用,则查找倒数第二条记录),sql,sql-server,Sql,Sql Server,我有一张有唱片的桌子 这里我要身份证4、7和9 在这里,我希望每2个(如果有很多)记录的细节。在上表中,我想获取Id (ticketid 1001为4), (对于TICKTID 1002)和 (对于ticketid 1003,为9)。 对于ticketid 1003,它应该获取id 9,因为它没有其他id。对于sql server 2005和更新版本,您可以使用以下方法: WITH CTE AS ( SELECT ID, Status, TicketID, RN

我有一张有唱片的桌子

这里我要身份证4、7和9

在这里,我希望每2个(如果有很多)记录的细节。在上表中,我想获取Id
(ticketid 1001为4),
(对于TICKTID 1002)和
(对于ticketid 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
如果不想使用类似于子查询/视图的公共表表达式:

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

试试下面这个,

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

i、 e.其中派生列名%2=0

请分享你的全部信息,也就是说你的数据是什么,你到底想从这些输入中得到什么

因此,我们将对您的问题给予更多的澄清,并提供解决方案


谢谢。

什么版本的sql server?还可以将示例数据显示为文本,这样我们就可以创建一个sql FIDLE。这不是一个注释而不是一个答案吗?此外,他还提供了数据和期望的结果。我们可以不用CTE吗?就像简单的选择一样。事实上,我想把这个结果和大量的数据结合起来,如果我们能找到一些替代方案,那就太好了。顺便说一句,谢谢您的回答。@Subo:您可以将此CTE与其他表合并。这就像使用一个简单的子查询一样。@Subo:不过,我已经编辑了我的答案以提供子查询。好棒的朋友。让我查一下。谢谢@Tim