簡體   English   中英

如何從特定的大約獲得頂行。使用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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM