簡體   English   中英

從Postgres中的Date []數組有條件地創建多個計數列

[英]Creating multiple count columns conditionally from Date[] Array in Postgres

我正在嘗試為多個日期范圍的返回結果數量創建/迭代計數。 我可以使用以下方法生成所需的結果:

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

其中qualified_dates是日期數組列,其他是文本; 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

我非常感謝您提供的任何幫助。 謝謝!

您應該只使用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;

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM