以每月滚动的形式存储基于日期的查询结果 table

storing result of a query based on the date in a rolling monthly table

我正在尝试根据日期将查询结果存储到每月 table(过去 30 天)中。

2018 年 2 月 1 日的示例: 给出了 310

SELECT *
FROM properties p
INNER JOIN orders o
  ON o.property_id = p.id
WHERE o.type = 'Order::PromotedListing'
  AND o.expired_at::DATE > '2018-02-01'
  AND o.created_at::DATE <= '2018-02-01'
ORDER BY o.updated_at

对于 2018 年 2 月 2 日: 给我的计数是 307

SELECT *
FROM properties p
INNER JOIN orders o
  ON o.property_id = p.id
WHERE o.type = 'Order::PromotedListing'
  AND o.expired_at::DATE > '2018-02-02'
  AND o.created_at::DATE <= '2018-02-02'
ORDER BY o.updated_at

等等。

我想根据临时 table/CTE 中的日期存储过去 30 天的 计数 。像这样的 -

day, count
2018-02-01, 310
2018-02-02, 307
...
...

所以我想到了这个查询,但它没有做我想做的事情。

WITH monthly_dates AS (
  SELECT d.date as day
  FROM generate_series(current_date - interval '30 day',
                       current_date,
                       '1 day') AS d
),
featured_listings AS (
  SELECT o.expired_at::date, o.created_at::date, o.updated_at::date
  FROM properties p
  INNER JOIN orders o
    ON o.property_id = p.id
  WHERE o.type = 'Order::PromotedListing'
)
SELECT m.day, COUNT(*)
FROM monthly_dates AS m
LEFT JOIN featured_listings AS f
  ON m.day = f.updated_at
WHERE f.expired_at > m.day
 AND f.created_at <= m.day
GROUP BY 1
ORDER BY 1;

任何有关完成此任务的意见都将不胜感激。

您似乎想要:

SELECT g.dte, count(o.property_id)
FROM generate_series('2018-02-01'::date, '2018-02-28'::date, interval '1 day'
                    ) g(dte) INNER JOIN
     orders o
     ON o.expired_at::DATE > g.dte AND o.created_at::DATE <= o.gte
GROUP BY g.dte
ORDER BY g.dte;

我认为您不需要 properties table 来进行此查询。