首页 > 解决方案 > 仅选择第 1 条和第 10 条记录

问题描述

有一个包含 3 列的表:ID、签名和日期时间,它按具有计数 (*) > 9 的签名分组。

select * from (
    select s.Signature 
    from #Sigs s
    group by s.Signature 
    having count(*) > 9
) b
join #Sigs o 
on o.Signature = b.Signature
order by o.Signature desc, o.DateTime

我现在只想根据签名选择第 1 条和第 10 条记录。决定排名的是日期时间降序。因此,我希望每个签名都有 2 行。

谢谢,

标签: tsqlssms

解决方案


我会使用几个常见的表表达式。
第一个将从表中选择所有记录以及每个签名的记录计数,第二个将从记录计数> 9的第一个中选择并添加按签名分区的 row_number - 然后仅从 row_number 的位置中选择是 1 或 10:

With cte1 AS
(
    SELECT ID, Signature, Datetime, COUNT(*) OVER(PARTITION BY Signature) As  NumberOfRows
    FROM #Sigs    
), cte2 AS
(
    SELECT ID, Signature, Datetime, ROW_NUMBER() OVER(PARTITION BY Signature ORDER BY DateTime DESC) As Rn
    FROM cte1
    WHERE NumberOfRows > 9
)

SELECT ID, Signature, Datetime
FROM cte2
WHERE Rn IN (1, 10)
ORDER BY Signature desc

推荐阅读