SQL查找全新的客户端

问题描述 投票:0回答:1

我正在尝试运行一个脚本,以仅提取第一个(最小)发票日期为昨天的客户。一个存储的proc将在星期五早上运行以提供结果(我们在星期四运行帐单),因此它将根据昨天的第一个发票日期返回任何新客户。

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)

^^^像这样

sql min
1个回答
0
投票

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

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

© www.soinside.com 2019 - 2024. All rights reserved.