Select Datediff 不起作用的地方
Select where Datediff won't work
我有两张桌子。 VIP
和 transactions
我想获取未过期的值的总和。
过期日期公式为 : DATEADD(DAY,VIP.vipValue,[transaction].tDate)
.
where 子句必须是这样的:
DATEDIFF(DAY,GETDATE(),DATEADD(DAY,VIP.vipValue,[transaction].tDate)) > 0
我试试这个:
SELECT SUM(v.vipValue)
FROM [transaction] AS t LEFT JOIN
VIP AS v ON v.vipId = t.vipId
WHERE DATEDIFF(DAY,GETDATE(),DATEADD(DAY,v.vipValue,t.tDate)) > 0
但它是 return 我的空结果;但是,如果我输入 v.vipValue
的一些数字(例如:30),我会得到真实的结果。为什么 v.vipValue
有问题,我哪里错了?
更新post
澄清一下,这些是 VIP 和交易数据
根据评论,应该使用 v.[timeout] 来比较日期差异而不是 v.vipValue。
使用 table 变量的示例代码:
declare @transaction table (tId int identity(1,1), vipId int, tDate date);
declare @VIP table (vipId int, vipValue int, [timeout] int);
insert into @VIP (vipId, vipValue, [timeout]) values (1,1,1), (2,2,20), (3,3,30);
insert into @transaction (vipId, tDate) values (1,getDate()-1), (2,getDate()-1), (3,getDate()-1), (4,getDate()-1);
SELECT t.*, v.vipValue, v.[timeout], DATEDIFF(DAY,t.tDate,GETDATE()) as DayDiff
FROM @transaction AS t
LEFT JOIN @VIP AS v ON v.vipId = t.vipId;
SELECT SUM(v.vipValue)
FROM @transaction AS t
JOIN @VIP AS v ON v.vipId = t.vipId
WHERE v.[timeout] > DATEDIFF(DAY,t.tDate,GETDATE());
第二个查询会return5
我有两张桌子。 VIP
和 transactions
我想获取未过期的值的总和。
过期日期公式为 : DATEADD(DAY,VIP.vipValue,[transaction].tDate)
.
where 子句必须是这样的:
DATEDIFF(DAY,GETDATE(),DATEADD(DAY,VIP.vipValue,[transaction].tDate)) > 0
我试试这个:
SELECT SUM(v.vipValue)
FROM [transaction] AS t LEFT JOIN
VIP AS v ON v.vipId = t.vipId
WHERE DATEDIFF(DAY,GETDATE(),DATEADD(DAY,v.vipValue,t.tDate)) > 0
但它是 return 我的空结果;但是,如果我输入 v.vipValue
的一些数字(例如:30),我会得到真实的结果。为什么 v.vipValue
有问题,我哪里错了?
更新post
根据评论,应该使用 v.[timeout] 来比较日期差异而不是 v.vipValue。
使用 table 变量的示例代码:
declare @transaction table (tId int identity(1,1), vipId int, tDate date);
declare @VIP table (vipId int, vipValue int, [timeout] int);
insert into @VIP (vipId, vipValue, [timeout]) values (1,1,1), (2,2,20), (3,3,30);
insert into @transaction (vipId, tDate) values (1,getDate()-1), (2,getDate()-1), (3,getDate()-1), (4,getDate()-1);
SELECT t.*, v.vipValue, v.[timeout], DATEDIFF(DAY,t.tDate,GETDATE()) as DayDiff
FROM @transaction AS t
LEFT JOIN @VIP AS v ON v.vipId = t.vipId;
SELECT SUM(v.vipValue)
FROM @transaction AS t
JOIN @VIP AS v ON v.vipId = t.vipId
WHERE v.[timeout] > DATEDIFF(DAY,t.tDate,GETDATE());
第二个查询会return5