SQL Найдите новых клиентов - PullRequest
1 голос
/ 08 мая 2020

Я пытаюсь запустить сценарий, чтобы вытащить только клиентов, у которых первый (минимальный) счет был вчера. Сохраненный pro c будет запускаться для доставки результатов утром в пятницу (мы выставляем счета по четвергам), поэтому он будет возвращать всех новых клиентов на основе этой вчерашней даты первого счета.

Dbo. invoice содержит наши счета;

dbo.company содержит записи клиента;

dbo.contact содержит фактических сотрудников клиента;

dbo.match содержит продаваемый продукт / услугу

select 
co.company_id, co.name, i.DATE_EFFECTIVE, i.INVOICE_ID
from dbo.match m
    inner join dbo.contact c on m.CONTACT_ID_BILLING = c.CONTACT_ID
    inner join dbo.company co on c.COMPANY_ID = co.COMPANY_ID
    inner join dbo.invoice i on co.company_id = i.company_id
WHERE min(i.date_effective) = (getdate() - 1)

^^^ примерно так

1 Ответ

0 голосов
/ 08 мая 2020

Используйте агрегирование и предложение having:

select co.company_id, co.name, min(i.DATE_EFFECTIVE)
from dbo.match m join
     dbo.contact c
     on m.CONTACT_ID_BILLING = c.CONTACT_ID join
     dbo.company co
     on c.COMPANY_ID = co.COMPANY_ID join
     dbo.invoice i
      on co.company_id = i.company_id
group by co.company_id, co.name
having min(i.data_effective) >= dateadd(day, -1, convert(date, getdate())) and
       min(i.data_effective) < convert(date, getdate());

Это не включает идентификатор счета-фактуры. В данном контексте это не кажется особо важным. Если есть только один, то к select можно добавить max(i.invoice_id).

...