我有一张桌子
id |文件名|尺寸|日期|为了
我想为每个日期选择n个小于100Mo的第一个文件(大小) 例如,如果我有:
数据表: -
我想只保留ID 1,2和11。
我已经写了这个,但它只给了我第一个日期组。
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
)
)
答案 0 :(得分:1)
我对您的问题的理解:对于每个日期,我希望在该日期的第一行超过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
答案 1 :(得分:0)
这应该有效:
;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