首页 > 解决方案 > SQL 视图:查找每天的最大交易量

问题描述

我有一个具有以下架构的表:

CREATE TABLE Sales (
"Date"  date,
ID      char(3),
Volume  integer not null check (Volume >= 0),
primary key ("Date", ID)
; 

Date是产品的销售日期,ID是产品的id,Volume是当天销售的产品数量。这是输入数据库的样本数据:

Date       | ID   |  volume  
------------+------+---------
 2012-01-03 | AAA  |   100
 2012-01-03 | BBB  |    50
 2012-01-03 | CCC  |   356
 2012-01-04 | AAA  |    66
 2012-01-04 | CCC  |    99
 2012-01-15 | BBB  |   210

我想找出每天销售量最大的产品。

预期输出如下:

Date       | ID   |  volume  
------------+------+---------
 2012-01-03 | CCC  |   356
 2012-01-04 | CCC  |    99
 2012-01-15 | BBB  |   210

我尝试了以下代码,但它给出了错误的输出:

create or replace view Sales("Date", ID, volume) as
select  a."Date", a.ID, max(a.volume)
from Sales a
group by a."Date", a.ID
;

我觉得组 a.ID 部分有问题,但我不确定。非常感谢任何帮助,谢谢!

标签: sqldatabasepostgresqlviewschema

解决方案


第一组按日期获取最大音量,然后加入表以获取与每个最大音量对应的行:

select s.*
from sales s inner join (
  select "Date", max(Volume) maxVolume
  from sales
  group by "Date"
) g on g."Date" = s."Date" and g.maxVolume = s.Volume
order by s."Date"

推荐阅读