Tsql 根据ClientId动态更改查询的StartDate

Tsql 根据ClientId动态更改查询的StartDate,tsql,Tsql,我想返回自当前插入订单发票开始以来,为多个客户每天花费的金额。不幸的是,对于当前插入顺序,每个客户端都有不同的开始日期 我在提取每个客户机的开始日期方面没有任何问题,但我不知道如何创建一种查找表,其中包含与每个客户机关联的开始日期 假设我有一个表IO: 和另一个表,其中包含每个客户的每日支出: Date Client Spend 2014-10-01 1 2325 2014-10-01 2 195 2014-10-01 3

我想返回自当前插入订单发票开始以来,为多个客户每天花费的金额。不幸的是,对于当前插入顺序,每个客户端都有不同的开始日期

我在提取每个客户机的开始日期方面没有任何问题,但我不知道如何创建一种查找表,其中包含与每个客户机关联的开始日期

假设我有一个表IO:

和另一个表,其中包含每个客户的每日支出:

Date          Client    Spend
2014-10-01    1         2325
2014-10-01    2         195
2014-10-01    3         434
2014-10-02    1         43624
...
现在,我只想检查每个客户从当前插入订单的开始日期到昨天的花费

select *
  from IO 
  join DailySpend 
    on IO.ClientId = DailySpend.Client 
   and DailySpend.Date <= IO.StartDate 
   and datediff(dd, getdate(), DailySpend.Date) <= 1

select DailySpend.Client, sum(DailySpend.Spend)
  from IO 
  join DailySpend 
    on IO.ClientId = DailySpend.Client 
   and DailySpend.Date >= IO.StartDate 
   and datediff(dd, getdate(), DailySpend.Date) <= 1
 group by DailySpend.Client

您可能需要在datediff中翻转日期顺序

SELECT a.client,
       Sum(b.spend)
FROM   [IO] a
       JOIN DailySpend b
         ON a.id = b.id
         and a.startdate=>b.date
WHERE  b.date <= Dateadd(dd, -1, Cast(Getdate() AS DATE))
GROUP  BY client 
为什么不试试,从Dailyspend dp group by client中选择SumExpense,其中date>=从IO中选择startdate,其中clientid=dp.client。这基本上是可行的。您可能希望对查询进行必要的更改。
SELECT a.client,
       Sum(b.spend)
FROM   [IO] a
       JOIN DailySpend b
         ON a.id = b.id
         and a.startdate=>b.date
WHERE  b.date <= Dateadd(dd, -1, Cast(Getdate() AS DATE))
GROUP  BY client