【发布时间】:2014-01-02 15:22:02
【问题描述】:
我目前正在创建 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 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
我有以下条件:
- CurrentEndDate 应该是 Today-30 和 Today+365。
- RstartDate 和 REndDate 之间的差值应大于年 (365)。
如果每个 ItemId 的所有条件都满足,那么我将显示 Valid Else Not Valid。
注意:所有行都应满足上述条件。
我编写了一个 SQL,但无法找到正确的方法来获取 RstartDate 和 REndDate 的 DateDiff。
输出:
预期结果:
ItemId 结果
101 NotValid
102 Valid
但得到以下结果:
ItemId 结果
101 Valid
101 NotValid
102 Valid
SQL
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
解释:
- 对于 CurrentEndDate,我为每个 ItemId 找到了 Max 和 Min,并应用了条件 1。考虑 Max 和 Min 是否满足行间的其余部分也将满足。
- 但我不确定如何为 Rstartdate 和 RendDate 应用 DateDiff。 因为我需要单独为每一行应用条件 2..
注意:对于第 2 行,RstartDate 和 REndDate 的差异不超过 365。
请帮忙...
【问题讨论】:
-
(Cast(DATEDIFF(DAY,MIN(CurrentEndDate) OVER(PARTITION BY ITemId),GETDATE()) AS int)
-
是的,应该是 > 错字错误..我已经更改了它,我有一个下限,即日期应该从今天起不超过 30 天,并且不超过从今天起不超过 1 年
-
我不明白您是如何对 itemid 102 有效的。Currentdate 在两者上都是相同的,并且它与今天之间的 DateDiff 是 82。82 不在 30 和 -365 之间。我离这儿很远吗?
-
@user3083310 我使用的是英国日期格式 DD/MM/YYYY。所以日期差异将是 24 天..
标签: c# sql sql-server tsql datediff