基于逻辑加法条件的SQL查询DATEDIFF-如何?
我如何编写一个查询,计算从另一个表添加到一个单元格值所需的时间 例如,在下面两个表中,我想从表2中用户A的借记开始,并从表1中计算从借记日期算起,用户A需要向后多少天才能累积到表2中的值基于逻辑加法条件的SQL查询DATEDIFF-如何?,sql,sql-server,Sql,Sql Server,我如何编写一个查询,计算从另一个表添加到一个单元格值所需的时间 例如,在下面两个表中,我想从表2中用户A的借记开始,并从表1中计算从借记日期算起,用户A需要向后多少天才能累积到表2中的值 Date User Credits Apr 30 A 25 Apr 30 B 75 May 1 A 25 May 2 A 25 May 2 B 75 May 3 A 50 May 3 B 75
Date User Credits
Apr 30 A 25
Apr 30 B 75
May 1 A 25
May 2 A 25
May 2 B 75
May 3 A 50
May 3 B 75
Date User Debits
May 4 B 150
May 5 A 100
我想从表2中每个用户的借方值开始,计算从借方日期向后多少天才能达到该贷方金额。在这种情况下,我寻找的用户A的结果是5-5天达到100。这需要适用于多个用户。用户B的结果应该是3-3天,从5月4日返回到5月2日,以达到150
我对如何开始感到困惑。解决方案是一组IF语句吗
样本结果:
Debit Date User Debit Amount Days Back of Credits
4-May B 150 3
5-May A 100 5
试试这个
cte是为了找到累积平衡
; with cte as
(
select [User] = t2.[User],
Debit_Date = t2.[Date],
Debit_Amt = t2.[Debits],
Credit_Date = t1.[Date],
Balance = t2.[Debits] - SUM(t1.[Credits]) OVER (PARTITION BY t2.[Date] ORDER BY t1.[Date])
from table2 t2
inner join table1 t1 on t2.[User] = t1.[User]
)
select [User],
Debit_Date,
Debit_Amt,
[Days] = datediff(day, min(Credit_Date), Debit_Date) + 1
from cte
where Balance >= 0
group by [User], Debit_Date, Debit_Amt
我认为您的日期差异是错误的,但表A中的两个日期是正确的 与我的结果进行验证,并与其他样本日期进行测试,并让我知道
declare @TableA table(Dates date,Users varchar(50),Credits int)
insert into @TableA VALUES
('2017-Apr-30','A',25)
,('2017-Apr-30','B',75)
,('2017-May-1 ','A',25)
,('2017-May-2 ','A',25)
,('2017-May-2 ','B',75)
,('2017-May-3 ','A',50)
,('2017-May-3 ','B',75)
declare @TableB table(Dates date,Users varchar(50),Debit int)
insert into @TableB VALUES
('2017-May-4','B',150)
,('2017-May-5','A',100)
;with CTE as
(
select A.Dates,A.Users
,(select sum(A1.Credits) from @TableA A1
where a1.dates<=a.dates
and a1.users=a.users)cr
from @TableA A
)
,CTE1 AS(
select b.Dates [Debit Date],b.Users
,b.Debit [Debit Amount]
,(
select top 1 c.dates
from cte c where
b.Users=c.users and c.cr>=b.Debit
)CreditDates
from @TableB B
)
select [Debit Date],Users,[Debit Amount]
,datediff(day,CreditDates,[Debit Date])[Days Back of Credits]
,CreditDates -- just for test
from cte1
但3天内,A的总数加起来是100。那为什么是5?同时将更多用户的样本数据放在两个表中,所有用户的预期输出是什么?5是从借方日期(5月5日)开始的倒计时。如果表1的日期范围超出表2的范围,会发生什么情况?这样就可以了。我想从一个选定的借方开始,在本例中是5月5日的100,然后从贷方表的5月5日开始倒数,直到5月5日或更早的时候,总计到100为止。我仍然无法理解倒数的逻辑。我建议为其他用户提供更详细的示例数据,谢谢!我所要做的只是将a