我正在尝试创建/迭代多个日期范围内返回的结果数的计数。我可以使用以下方法生成所需的结果:
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
我非常感谢您提供的任何帮助。谢谢!
答案 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;