如何从给定日期计算每月总计

时间:2019-06-04 16:22:29

标签: postgresql

我有下表

CREATE TABLE tickets(
  Id INT, 
  date_ date
);

以及以下数据

INSERT INTO tickets (id, date_)
VALUES (1, '2019-04-01'), 
    (2, '2019-04-02'), 
    (3, '2019-05-01'), 
    (4, '2019-05-02’);

每行代表一张已购买的票。我正在尝试计算从指定日期起每月购买的车票数量。

例如

2019-04-01应该返回1,因为从2019-03-01到2019-04-01只购买了1张门票

2019-01-02应该返回2,因为在2019-03-02至2019-04-02之间购买了2张门票

2019-05-01 3

2019-05-02 3

我尝试了以下

SELECT count(id) as count_tickets,
    date_
    FROM tickets
    WHERE date_ <= date_
    AND date_ >= date_ - interval '1' month
    GROUP BY date_

但这只会返回当天的总数。如何获得给定日期的每月总数?每月,表示从给定日期到给定日期之前1个月。

1 个答案:

答案 0 :(得分:0)

使用相关查询:

SELECT t1.date_, (SELECT COUNT(*) 
                  FROM tickets t2 
                  WHERE t2.date_ <= t1.date_ 
                    AND t2.date_ >= t1.date_ - interval '1' month) as total_tickets
FROM tickets t1

如果date_是一个参数,则只需删除group by

SELECT count(id) as count_tickets
FROM tickets
WHERE date_ <= the_date
  AND date_ >= the_date - interval '1' month