仅选择第 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
有一个包含 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