Pra*_*r J 5 sql sql-server 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
Run Code Online (Sandbox Code Playgroud)
在这种情况下,我有
2016-11-11 10行2016-11-12
2016-11-13
2行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
Run Code Online (Sandbox Code Playgroud)
提前致谢.
尝试使用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)
Run Code Online (Sandbox Code Playgroud)
结果:
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
Run Code Online (Sandbox Code Playgroud)
归档时间: |
|
查看次数: |
39 次 |
最近记录: |