仅选择第 1 条和第 10 条记录

Selecting the 1st and 10th Records Only

有一个包含 3 列的 table:ID、Signature 和 Datetime,它按 Signature Having Count(*) > 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

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

谢谢,

因为我不知道你的数据是什么样的,这可能需要一些调整。

此处最简单的方法,因为您已经知道您的排序顺序 (DateTime DESC) 和分区 (Signature),可能是分配行号,然后 select 您需要的行想要。

SELECT *
FROM
(
select o.Signature
      ,o.DateTime
      ,ROW_NUMBER() OVER (PARTITION BY o.Signature ORDER BY o.DateTime DESC) [Row]
    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
)
WHERE [Row] IN (1,10)

我会使用一些常见的 table 表达式。
第一个将 select 来自 table 的所有记录以及每个签名的记录计数,第二个将 select 来自第一个记录计数 > 9 的记录并添加 row_number 按签名分区 - 然后只是 select 来自 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