我如何使generate_series工作一个月的一部分



我使用filled_months来填充空白月份并按月分组数据。问题是我似乎不能让它用于查询部分月份(例如2016-09-01到2016-09-15),它总是计算整个月份。有人能给我指个正确的方向吗?

with filled_months AS
  (SELECT
   month,
          0 AS blank_count
   FROM generate_series(date_trunc('month',date('2016-09-01')), date_trunc('month',date('2016-09-15')), '1 month') AS
   month)
SELECT to_char(mnth.month, 'YYYY Mon') AS month_year,
       count(distinct places.id)
FROM filled_months mnth
left outer join restaurants
  ON date_trunc('month', restaurants.created_at) = mnth.month
left outer join places
  ON restaurants.places_id = places.id
WHERE places.id IS NULL OR restaurants.id IS NULL
GROUP BY mnth.month
ORDER BY mnth.month

如果我正确理解了您的困惑,我认为您甚至不需要这里的generate系列。我认为您可以在where子句中使用between,并让SQL中的分组处理其余部分:

SELECT
  to_char(r.created_at, 'YYYY Mon') AS month,
  count(distinct p.id)
FROM
  restaurants r
  left join places p ON r.places_id = p.id
WHERE
  r.created_at between '2016-09-01' and '2016-09-15'
GROUP BY month
ORDER BY month

我在日期为9/1/16、9/15/16和9/30/16的三条记录上进行了测试,结果显示计数为2。当我将范围扩大到9/30时,它正确地给出了3。

免责声明:我不明白这是什么意思:

places.id IS NULL OR restaurants.id IS NULL

如果这不起作用,那么也许您可以在您的问题中添加一些示例数据,以及一些预期的结果。

相关内容

  • 没有找到相关文章

最新更新