Sql server SQL Server选择每个组中大小小于X的前N行
我有一张桌子 id |文件名|大小|日期|顺序 我想为每个日期选择n个小于100Mo大小的第一个文件 例如,如果我有: 数据表:- 我只想保留ID 1、2和11 我已经写了这篇文章,但它只给了我第一个约会组Sql server SQL Server选择每个组中大小小于X的前N行,sql-server,Sql Server,我有一张桌子 id |文件名|大小|日期|顺序 我想为每个日期选择n个小于100Mo大小的第一个文件 例如,如果我有: 数据表:- 我只想保留ID 1、2和11 我已经写了这篇文章,但它只给了我第一个约会组 SELECT ID, filename, size, date, ordre FROM tableName WHERE ID IN ( SELECT ID FROM tableName WHERE ID < (SEL
SELECT
ID,
filename,
size,
date,
ordre
FROM tableName
WHERE ID IN ( SELECT ID FROM tableName
WHERE ID <
(SELECT TOP 1 ID
FROM tableName
WHERE size > 100
)
)
我对您的问题的理解是:对于每个日期,我都希望在超过100Mb的日期的第一行之前,按ID排序获得所有行 如果我的理解是正确的,那么像这样的事情怎么样:
SELECT t.ID, t.size, t.date, t.ordre
FROM #tmp t
LEFT JOIN (
SELECT MIN(ID) AS MinID, [date]
FROM #tmp
WHERE size > 100
GROUP BY [date]
) m ON t.[date] = m.[date]
WHERE t.ID < m.MinID
OR m.MinID IS NULL -- for when there is no sizes > 100Mb for a date
这应该起作用:
;with x as (
select *, row_number() over (partition by date order by id) rn
from tablename
where size < 100
)
select * from x where rn <= @n
请添加一些示例表数据和预期结果-以及格式化文本。没问题,很高兴提供帮助!好的,在一个更大的桌子上测试了一下,效果很好。谢谢