Postgres Query, чтобы получить детали до 2 месяцев - PullRequest
0 голосов
/ 26 апреля 2018

Я хочу получить информацию о клиентах, которые не посещали последние два месяца, используя postgresql. Ниже мой запрос. Я получаю все данные до 2 месяцев, но также хочу знать, посещает ли клиент в течение двух месяцев. Если это так, результат запроса не должен показывать этого клиента.

select usr.name,usr.mobile,ihv.create_date,ihv.partner_id from 
invoice_header_view ihv join user_store_mapper usm on ihv.partner_id = 
usm. partner_id join public.user usr on usr.user_id = usm.user_id 
where usm.store_id = '123' and cast(ihv.create_date as date) = 
cast(now() as date) -  interval '2 month' and (cast(ihv.create_date as 
date) between cast(ihv.create_date as date) and cast(now() as 
date) - interval '2 months')

Ответы [ 2 ]

0 голосов
/ 26 апреля 2018

Если вы хотите, чтобы клиенты, чья последняя дата была более двух месяцев назад, вы можете использовать:

SELECT u.name, u.mobile
FROM invoice_header_view ihv JOIN
     user_store_mapper usm
     ON ihv.partner_id = usm.partner_id JOIN
     public.user u
     ON u.user_id = usm.user_id
WHERE usm.store_id = 123   -- I'm guessing this really a number
GROUP BY u.name, u.mobile
HAVING max(ihv.create_date) <= curdate() - interval '2 months';
0 голосов
/ 26 апреля 2018

Один из способов ее решения - NOT EXISTS. Вы можете создать связанный подзапрос, который будет проверять наличие новых строк в invoice_header_view.

Другой способ - использовать GROUP BY, например

SELECT
    usr.name, usr.mobile, ihv.partner_id,
    max(ihv.create_date) AS max_create_date,
    count(*) AS invoice_header_count
FROM invoice_header_view ihv 
    JOIN user_store_mapper usm ON ihv.partner_id = usm.partner_id
    JOIN public.user usr ON usr.user_id = usm.user_id
WHERE
    usm.store_id = '123'
    AND ihv.create_date >= now() - interval '2 months' 
GROUP BY
    1,2,3
HAVING
    max(ihv.create_date) <= now() - interval '2 months';
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...