我有一张桌子sales
,每销售一件商品就有一个条目。我想确定两天内售出300件以上的商品。我有以下工作查询,这些查询返回一日内销售超过300的那些物品。如何修改此查询以涵盖两天的时间?
我需要同时返回日期和计数。不幸的是,sold_date
的列类型是date
,而不是date_time
。
select
item_id, sold_date, count(*) as cnt
from
sales
group by
item_id, sold_date
having
count(*) > 300;
我正在使用PostgreSQL 11.1
sales
中的数据示例:
item_id sold_date
102836 '2016-04-04'
102836 '2016-02-08'
102836 '2016-02-08'
102836 '2016-01-25'
102836 '2016-01-11'
102836 '2016-02-08'
102836 '2016-02-08'
102836 '2016-04-04'
102836 '2016-02-29'
102836 '2016-02-22'
102836 '2016-03-28'
102836 '2016-02-29'
预期输出示例:
item_id sold_date cnt
130229 '2019-01-22' '328'
81567 '2018-04-18' '368'
76915 '2019-01-22' '339'
95761 '2019-01-22' '318'
84732 '2019-01-22' '307'
83095 '2019-01-22' '329'
101076 '2019-01-22' '311'
84458 '2019-01-22' '301'
84408 '2019-01-22' '313'
97428 '2019-01-22' '339'
输出中的sold_date还包括前一天或后一天。
答案 0 :(得分:0)
可以在现在到
前两天之间使用select item_id, count(*) as cnt
from sales
where sold_date between (now() - intervat '1 day') and now()
group by item_id
having count(*) > 300;
对于2天之间的所有两天项目,您可以使用子查询并加入
select item_id, count(*) as cnt
from sales
inner join (
select distinct sold_date end_date, sold_date - intervat '2 day' start_date
from sales
) t on sales between start_date and end_date
group by item_id
having count(*) > 300;