Как объединить два разных счетчика из двух разных диапазонов дат sql

Я постараюсь сделать это проще.

У меня есть два запроса, которые работают нормально, они оба подсчитывают, сколько пользователей зарегистрировалось в тот день между определенным диапазоном дат.

Запрос 1 - получает список пользователей, которые подписались на каждый день в году, начиная с сегодняшнего дня. Вот картина результата.

SELECT users.created::date,
       count(users.id)
FROM users
WHERE users.created::date < now() - interval '12 month'
  AND users.created::date > now() - interval '13 month'
  AND users.thirdpartyid = 100
GROUP BY users.created::date
ORDER BY users.created::date

Запрос 2 - получает список пользователей, которые зарегистрировались каждый день месяц назад, начиная с сегодняшнего дня. Вот изображение этого результата.

SELECT users.created::date,
       count(users.id)
FROM users
WHERE users.created::date > now() - interval '1 month'
  AND users.thirdpartyid = 100
GROUP BY users.created::date
ORDER BY users.created::date

Я застрял в том, как я могу объединить эти два запроса, чтобы создать столбчатую диаграмму стека на моем веб-сайте Redash. Очевидно, это разные годы, но я бы хотел, чтобы моя ось X была днем ​​месяца, а Y - количеством пользователей. Спасибо.

Редактировать:

Вот пример вывода, который, я думаю, идеально подойдет мне.

| Day of the month  | Users signed up December 2017 | Users signed up December 2018
|------------------ | ----------------------------- | -----------------------------|
|         01                       45                                56
| ----------------- | ----------------------------  | -----------------------------|
|         02                       47                                32
| ----------------- | ----------------------------  | -----------------------------|

etc...

person Trevor Phillips    schedule 04.01.2019    source источник
comment
каков ваш ожидаемый результат? вы также должны показать свой 1-й и 2-й результат запроса.   -  person Zakir Hossain    schedule 05.01.2019
comment
Я бы хотел, чтобы на моей оси X был день месяца, а на Y - количество пользователей.: именно это, кажется, делает первый запрос ...   -  person GMB    schedule 05.01.2019
comment
Привет, Тревор. Вы отметили этот вопрос "postgresql" и "sql". Если вы хотите получить совет от пользователей, знакомых с БД, которые не знакомы с редэшированием, было бы полезно добавить, как должен выглядеть результат вашего запроса.   -  person clamp    schedule 05.01.2019
comment
Не могли бы вы просто union два запроса вместе?   -  person Bohemian♦    schedule 05.01.2019
comment
И, возможно, вы ищете что-то вроде date_part ('day', input)   -  person clamp    schedule 05.01.2019
comment
@ZakirHossain Хорошие предложения. Я обновил свой вопрос для вас, ребята.   -  person Trevor Phillips    schedule 05.01.2019
comment
@clamp см. обновленный вопрос :)   -  person Trevor Phillips    schedule 05.01.2019


Ответы (1)


Вы можете попробовать использовать фильтры. Я взял на себя смелость выбрать день месяца, если вы этого хотите, а не полную дату.

SELECT date_part('day', users.created::date) as day_of_month,
       count(users.id) FILTER (
           WHERE users.created::date < now() - interval '12 month'
           AND users.created::date > now() - interval '13 month') AS month_12,
       count(users.id) FILTER (
           WHERE users.created::date > now() - interval '1 month') AS month_1
FROM users
WHERE (
       (
            users.created::date < now() - interval '12 month'
        AND users.created::date > now() - interval '13 month'
       ) OR users.created::date > now() - interval '1 month'
      )
  AND users.thirdpartyid = 100
GROUP BY day_of_month
ORDER BY day_of_month
person edruid    schedule 05.01.2019
comment
Да! Это оно! Спасибо - person Trevor Phillips; 05.01.2019