2017-03-15 59 views
2

我有一個表SQL服務器選擇TOP N行,其中粒徑小於X

ID |文件名|大小|日期|訂購

,我想選擇每個日期的N個第一文件小於100Mo(尺寸) 例如,如果我有:

數據表: -

enter image description here

我只想保留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

請添加一些樣本表數據和預期的結果。 – TheGameiswar

回答

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 
+0

沒問題,樂於幫忙! –

+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