Sql 按日期统计前5个值
我有一个缺陷描述和生产日期字段表,如下所示: +----------+--------+ |缺陷描述|生产日| +----------+--------+ |吹制垫片| 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 按日期统计前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
这将在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应该也能接受这个。