有条件地从Postgres中的Date []数组创建多个计数列

时间:2018-09-21 00:53:42

标签: sql postgresql

我正在尝试创建/迭代多个日期范围内返回的结果数的计数。我可以使用以下方法生成所需的结果:

SELECT variant, partner, COUNT(distinct eligible_dates) AS within_last_30_days 
FROM (
    SELECT partner, variant, unnest(eligible_dates) AS within_last_30_days 
    FROM product.catalog
    ) t1
    WHERE within_last_30_days > CURRENT_DATE - 30
    GROUP BY variant, partner

其中合格日期是日期数组列,其他是文本; item1在过去30天内将有4个数组条目(尽管在过去90天内可能有8个数组条目),并显示如下表格:

variant | partner | within_last_30_days
________________________________________
item1   |   p1    |          4
item2   |   p2    |          3

但是我在语法上遇到了麻烦,因为我试图创建另一列在过去90天内显示的内容...

variant | partner | within_last_30_days | within_last_90_days
______________________________________________________________
item1   |   p1    |          4          |          8
item2   |   p2    |          3          |          3

我非常感谢您提供的任何帮助。谢谢!

1 个答案:

答案 0 :(得分:0)

您应该只用GROUP BY就可以做到这一点。横向连接在这种情况下很有帮助:

SELECT c.partner, c.variant, 
       COUNT(DISTINCT CASE WHEN e.eligible_date > CURRENT_DATE - 30 THEN e.eligible_date END) as within_last_30_days,
       COUNT(DISTINCT CASE WHEN e.eligible_date > CURRENT_DATE - 90 THEN e.eligible_date END) as within_last_90_days
FROM product.catalog c CROSS JOIN LATERAL
     unnest(c.eligible_dates) as e(eligible_date)
GROUP BY c.variant, c.partner;