Создание нескольких столбцов по условию из массива Date [] в Postgres - PullRequest
0 голосов
/ 21 сентября 2018

Я пытаюсь создать / повторить счетчик для количества возвращенных результатов для нескольких диапазонов дат.Я могу генерировать результаты, которые я ищу, используя следующее:

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

, где elptable_dates - столбец массива дат, другие - текст;У item1 будет 4 записи в массиве за последние 30 дней (хотя может быть 8 за последние 90), и будет отображаться таблица, такая как:

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 голосов
/ 21 сентября 2018

Вы должны быть в состоянии сделать это только с 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;
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...