如何从特定的大约获得顶行.使用sql server 2008的百分比?

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)

提前致谢.

val*_*lex 5

尝试使用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)