在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子句中应用条件。
例如:where 派生列名称 %2 = 0
请分享您的完整信息,包括数据和您想从输入中得到的确切内容。
这样我们就能更清楚地了解您的问题并提供解决方案。
谢谢。