C# 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

我目前正在创建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应为btw Today-30和Today+365
  • RstartDate和REndDate之间的差异应大于年(365)
  • 如果每个ItemId的所有条件都满足,那么我将显示Valid-Else-Not-Valid

    注:所有行应满足上述条件

    我编写了一个SQL,但无法找到为RstartDate和REndDate获取DateDiff的正确方法

    输出:

    预期结果:

    ItemId结果 但结果如下:

    ItemId结果 SQL

    选择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
    
    说明:

  • 对于CurrentEndDate,我找到了每个ItemId的最大值和最小值,并应用了条件1。如果Max和Min满足中间行的其余部分,那么也会满足
  • 但我不知道如何将DateDiff应用于Rstartdate和RendDate。 因为我需要对每一行分别应用条件2
  • 注意:对于第2行,btw RstartDate和REndDate之间的差异不超过365


    请帮助…

    您的规则有问题

    请更详细地了解这一点

    
            (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