Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/file/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Sql server SQL Server选择每个组中大小小于X的前N行_Sql Server - Fatal编程技术网

Sql server SQL Server选择每个组中大小小于X的前N行

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

我有一张桌子

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
                    )
             )

我对您的问题的理解是:对于每个日期,我都希望在超过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

请添加一些示例表数据和预期结果-以及格式化文本。没问题,很高兴提供帮助!好的,在一个更大的桌子上测试了一下,效果很好。谢谢