![](/img/trans.png)
[英]How to delete the top 1000 rows from a table using Sql Server 2008?
[英]how to get top rows from particular approx. percentage using sql server 2008?
我需要約。 每個日期30個百分點的數據。
id name datecol
-----------------------
1 A 2016-11-11
2 B 2016-11-11
3 C 2016-11-11
4 D 2016-11-11
5 E 2016-11-11
6 F 2016-11-11
7 G 2016-11-11
8 H 2016-11-11
9 I 2016-11-11
10 J 2016-11-11
11 A1 2016-11-12
12 B1 2016-11-12
13 C1 2016-11-12
14 D1 2016-11-13
15 E1 2016-11-13
16 F1 2016-11-14
17 G1 2016-11-14
18 H1 2016-11-14
19 I1 2016-11-14
20 J1 2016-11-14
在這種情況下,我有
2016-11-11 10行
2016-11-12 3排
2016-11-13兩排
2016-11-14 5行
我需要這樣的約。 每個日期的頂行占30%,
id name datecol
-----------------------
1 A 2016-11-11
2 B 2016-11-11
3 C 2016-11-11
11 A1 2016-11-12
14 D1 2016-11-13
16 F1 2016-11-14
17 G1 2016-11-14
提前致謝。
嘗試使用ROW_NUMBER()獲取行號和COUNT()OVER()以獲取每個日期的總計數:
WITH CTE AS
(
SELECT T.*,
ROW_NUMBER() OVER (PARTITION BY datecol ORDER BY Name) as RowNum,
COUNT(*) OVER (PARTITION BY datecol) as Total
FROM Table as T
)
SELECT id,name,datecol
FROM CTE
WHERE RowNum <= CEILING(Total*0.30)
結果:
1 A 2016-11-11
2 B 2016-11-11
3 C 2016-11-11
11 A1 2016-11-12
14 D1 2016-11-13
16 F1 2016-11-14
17 G1 2016-11-14
;with cte as (
Select *
,RN=Row_Number() over (Partition By datecol Order By datecol)
From YourTable
)
Select A.*
From cte A
Join (Select datecol,cnt=count(*) from YourTable Group By datecol) B
on A.datecol=B.datecol
and A.RN<=ceiling(B.cnt*.3)
Order by datecol,RN
返回
id name datecol RN
1 A 2016-11-11 1
2 B 2016-11-11 2
3 C 2016-11-11 3
11 A1 2016-11-12 1
14 D1 2016-11-13 1
16 F1 2016-11-14 1
17 G1 2016-11-14 2
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.