sql - 如何从特定的大约中获取顶行。使用 sql server 2008 的百分比?

标签 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

In this case i have

2016-11-11共10行
2016-11-12共3行
2016-11-13共2行
2016-11-14共5行

i need like this by approx. 30 percentage of top rows from each date,

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

关于sql - 如何从特定的大约中获取顶行。使用 sql server 2008 的百分比?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40888707/

相关文章:

sql - 如何从 Sproc 中识别存储过程的调用者

c# - 如何在 where 和 between 子句中查询 DBF(dbase) 文件日期类型字段

php - 从mysql获取最新记录

sql-server - 使用 BCP 创建 XML 文件生成的文件对非 ASCII 字符的编码无效

mysql - 将 MySQL 转换为 SQL Server

sql - 将 char 数据存储为 nvarchar 有什么危害? (而且不一致)

java - 无法在 SQL 中更新给定字段

sql - 在 then of case when 语句中选择子查询?

sql-server - 如何在 T-SQL 中指定 BIGINT 文字?

sql-server-2008 - 是否可以在 MS SQL 中的同一个表的两列或更多列上创建全文索引?