重复在postgresql中的日期范围内返回多列的查询

时间:2017-04-04 16:53:11

标签: sql postgresql

如果我有一个名为orders的表:

id      date          value      client_name
1       01/02/2017    50         Name 1
2       02/02/2017    60         Name 2
3       02/02/2017    60         Name 2
4       03/02/2017    20         Name 2

一个查询,它可以获取有关特定日期订单的详细信息:

Select 
  sum(value) as total_order_value,
  count(id)  as number_of_orders
from orders
where orders.date = '02/03/2017'::date

有没有办法构建一个查询,该查询将对一系列日期执行该查询,为每个日期执行一行?

我过去曾经使用过这样的东西:

select date(a),
(SUB QUERY WHICH RETURNS A SINGLE VALUE)
FROM generate_series(
  (CURRENT_DATE - interval '2 months')::date,
  CURRENT_DATE,
  '1 day'
) s(a)

但这仅在子查询返回单个值时有效。当子查询返回多个列时(例如上面的第一个示例中),我正在寻找一种方法。

从上面的第一个例子开始,一个生成结果集的查询:

date           total_order_value      number_of_orders
01/02/2017     50                     1
02/02/2017     120                    2
03/02/2017     20                     1
04/02/2017     0                      0
05/02/2017     0                      0 
etc

1 个答案:

答案 0 :(得分:1)

generate_series的外部联接将包括没有订单的日期

select
    d::date,
    sum(value) as total_order_value,
    count(id)  as number_of_orders
from
    orders
    right join
    generate_series(
        (current_date - interval '2 months')::date,
        current_date,
        '1 day'
    ) gs (d) on d = orders.date
group by d