SQL 寻找全新的客户

SQL Find Brand New Clients

我正在尝试 运行 一个脚本,以仅将客户的第一个(最小)发票日期设置为昨天。存储过程将 运行 在星期五早上提供结果(我们 运行 我们在星期四开票),因此它将 return 任何新客户基于昨天的第一个发票日期。

Dbo.invoice 包含我们的发票;

dbo.company包含客户记录;

dbo.contact包含实际客户员工;

dbo.match 包含正在出售的 product/service

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)

^^^ 像这样

使用聚合和 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());

这不包括发票 ID。在这种情况下,它似乎并不特别重要。如果只有一个,则可以将 max(i.invoice_id) 添加到 select.