我正在尝试运行一个脚本,以仅提取第一个(最小)发票日期为昨天的客户。一个存储的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)
^^^像这样
使用聚合和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
。