Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/sql-server/22.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/c/72.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Sql 按日期统计前5个值_Sql_Sql Server - Fatal编程技术网

Sql 按日期统计前5个值

Sql 按日期统计前5个值,sql,sql-server,Sql,Sql Server,我有一个缺陷描述和生产日期字段表,如下所示: +----------+--------+ |缺陷描述|生产日| +----------+--------+ |吹制垫片| 2020-01-01| |吹制垫片| 2020-01-01| |吹制垫片| 2020-01-01| |爆胎| 2020-01-01| |吹风灯| 2020-01-01| |吹风灯| 2020-01-01| |吹风灯| 2020-01-01| |吹风灯| 2020-01-01| |爆胎| 2020-02-01| |爆胎| 2020

我有一个缺陷描述和生产日期字段表,如下所示:

+----------+--------+ |缺陷描述|生产日| +----------+--------+ |吹制垫片| 2020-01-01| |吹制垫片| 2020-01-01| |吹制垫片| 2020-01-01| |爆胎| 2020-01-01| |吹风灯| 2020-01-01| |吹风灯| 2020-01-01| |吹风灯| 2020-01-01| |吹风灯| 2020-01-01| |爆胎| 2020-02-01| |爆胎| 2020-02-01| |爆胎| 2020-02-01| +----------+--------+ 我如何计算每天前5个缺陷的数量:

+--------+----------+----+ |生产日|缺陷|描述|计数| +--------+----------+----+ |2020-01-01吹风灯4| |2020-01-01 |吹制垫片| 3| |2020-01-01 |爆胎| 1| |2020-02-01爆胎3| +--------+----------+----+
这将在SQL Server中工作

;WITH daysCTE as
(
    SELECT DISTINCT productionday
    FROM YourTable
)
SELECT daysCTE.productionday, t.*
FROM daysCTE 
CROSS APPLY 
(
    SELECT TOP 5
       defect_description, 
       Count(*) NumberOfDefects
    FROM   YourTable
    WHERE  productionday= daysCTE.productionday
    GROUP BY defect_description
    ORDER BY 2 DESC
) t

下面的查询应该在Postgres SQL中工作

select * from(
select *,rank() over (partition by productionday order by c desc ) as rank
from (
select defect_description, productionday, count(*) as c
        from tab
        group by productionday,defect_description
) A
) B
where rank <=5

我想这正是你想要的:

select t.*
from (select defect_description, productionday, count(*) as c,
             row_number() over (partition by productionday order by count(*) desc) as seqnum
      from tab
      group by productionday, defect_description
     ) t
where seqnum <= 5

请提及您的产品和版本。工作完美!!Thanks@JeremyReynolds如果加布里埃尔的回答对你有效,请接受这个。@JeremyReynolds应该也能接受这个。