C# SQL找不到DateDiff
我目前正在创建SQl,需要在其中查找两个日期之间的DateDiff 我的样品台C# SQL找不到DateDiff,c#,sql,sql-server,tsql,datediff,C#,Sql,Sql Server,Tsql,Datediff,我目前正在创建SQl,需要在其中查找两个日期之间的DateDiff 我的样品台 Sno ItemId LineItemId CurrentEndDate RStartDate REndDate 1 101 541 10/12/2013 11/12/2013 10/12/2014 2 101 542 10/01/2014 10/01/2014 12/12/2014 3
Sno ItemId LineItemId CurrentEndDate RStartDate REndDate
1 101 541 10/12/2013 11/12/2013 10/12/2014
2 101 542 10/01/2014 10/01/2014 12/12/2014
3 101 543 09/01/2014 11/01/2014 10/01/2016
4 102 544 10/12/2013 11/12/2013 10/12/2014
5 102 589 10/12/2013 11/12/2013 10/12/2014
我有以下情况:
选择ItemId,
案例:
(将日期diff(DAY,MIN(CurrentEndDate))转换为int(按ITemId划分),GETDATE()转换为int)<30
并强制转换(DATEDIFF(DAY,MIN(CurrentEndDate)OVER(partitionbyitemid),GETDATE())为int)>-365)
和(将DATEDIFF(DAY,MAX(CurrentEndDate)转换为int)(按ITemId划分),GETDATE()转换为int)<30
并强制转换(DATEDIFF(DAY,MAX(CurrentEndDate)OVER(partitionbyitemid),GETDATE())为int)>-365)
和CAST(DATEDIFF(DAY,RStartDate,REndDate)+1作为int)>=365
然后“引用”
否则“无效”
结果
从ItemTable
说明:
请帮助…您的规则有问题 请更详细地了解这一点
(Cast(DATEDIFF(DAY,MIN(CurrentEndDate) OVER(PARTITION BY ITemId),GETDATE()) AS int) < 30
AND Cast(DATEDIFF(DAY,MIN(CurrentEndDate) OVER(PARTITION BY ITemId),GETDATE()) AS int) < -365)
(转换(DATEDIFF(DAY,MIN(CurrentEndDate)OVER(PARTITION BY ITemId),GETDATE())为int)<30,转换(DATEDIFF(DAY,MIN(CurrentEndDate)OVER(PARTITION BY ITemId,GETDATE())为int)<-365)都是相同的,所以只需使用Yes it should is>typo error..我已经更改了它,并且我有一个较低的限制,即日期应该从今天起不超过30天,并且从今天起不超过1年。我不知道您如何获得itemid 102的有效性。两者的Currentdate相同,与今天的DateDiff为82。82不在30和-365之间。我离这里很远吗?@user3083310我使用的是英国日期格式DD/MM/YYYY。所以日期差为24天。是的,你是对的,我会更改。。但是需要帮助来处理我的第二个问题Daniel谢谢。。我不想使用GROUPBY语句,因为我的原始查询将具有多表联接。。但我会尝试实施你的解决方案,看看它是否适合我。。。
101 Valid
101 NotValid
102 Valid
Select ItemId,
Case:
(Cast(DATEDIFF(DAY,MIN(CurrentEndDate) OVER(PARTITION BY ITemId),GETDATE()) AS int) < 30
AND Cast(DATEDIFF(DAY,MIN(CurrentEndDate) OVER(PARTITION BY ITemId),GETDATE()) AS int) > -365)
AND (Cast(DATEDIFF(DAY,MAX(CurrentEndDate) OVER(PARTITION BY ITemId),GETDATE()) AS int) < 30
AND Cast(DATEDIFF(DAY,MAX(CurrentEndDate) OVER(PARTITION BY ITemId),GETDATE()) AS int) > -365)
AND CAST(DATEDIFF(DAY,RStartDate,REndDate) + 1 AS int) >= 365
THEN 'QUOTED'
else 'Not Valid'
End As Result
From ItemTable
(Cast(DATEDIFF(DAY,MIN(CurrentEndDate) OVER(PARTITION BY ITemId),GETDATE()) AS int) < 30
AND Cast(DATEDIFF(DAY,MIN(CurrentEndDate) OVER(PARTITION BY ITemId),GETDATE()) AS int) < -365)
Select
ItemId,
Case
when sum(
case when DATEDIFF(DAY,CurrentEndDate, GETDATE()) between -365 and 30 then 0 else 1 end
) = 0 THEN 'QUOTED'
when min(DATEDIFF(DAY,RStartDate,REndDate)) > 365 THEN 'QUOTED'
else 'Not Valid'
End As Result
From ItemTable
group by ItemId