使用SQL Server比较存储过程中的两个日期时间值?

时间:2017-11-14 18:36:55

标签: sql sql-server

在存储过程的SELECT语句中,我必须获取最大日期时间值。

((SELECT MAX(MyDateTime) 
  FROM MyTable 
  WHERE MyId = MM.MyId)) as RecentDateTime,

这很有效。我在SQL Server Management Studio网格中看到了具有日期时间值的新列。

但是,我需要将此值与另一个日期时间值进行比较,以确定它们是否相等。我在SELECT语句

中的以下语句中出现语法错误
((SELECT MAX(MyDateTime) 
  FROM MyTable 
  WHERE MyId = MM.MyId) = MM.MyDateTime) as RecentDateTime,  

或者:

@RecentDateTime = ((SELECT MAX(MyDateTime) 
                    FROM MyTable 
                    WHERE MyId = MM.MyId) = MM.MyDateTime)

如果我可以将比较结果存储到变量中,我可以将此值与其他值进行比较。

不确定为什么我一直收到语法错误或如何解决此问题。任何帮助都会得到新手的赞赏。

3 个答案:

答案 0 :(得分:0)

我想你想要像

这样的东西
  DECLARE @maxDate DATETIME
  Select @maxDate = MAX(MyDateTime) from MyTable where MyId = testIdValue

现在,您可以使用=< >运算符

与任何其他日期值进行比较

答案 1 :(得分:0)

相关子查询怎么样?

select 
     t.MyId
    ,t.MyDateTime
    ,RecentDateTime = (select max(t2.MyDateTime) from MyTable t2 where t2.MyId = t.MyId)
from
    MyTable t

或者使用派生表...

select 
    t.MyId
    ,t.MyDateTime
    ,RecentDateTime = t2.DT
from
    MyTable t
left join
    (select t2.MyId, max(t2.MyDateTime) DT from MyTable t2 group by t2.MyId) t2 on t2.MyId = t.MyId

然后,如果你只想要那些他们没有匹配的那些,你可以将它包装在CTE ......

;with cte as(
    select 
        t.MyId
        ,t.MyDateTime
        ,RecentDateTime = t2.DT
    from
        MyTable t
    left join
        (select t2.MyId, max(t2.MyDateTime) DT from MyTable t2 group by t2.MyId) t2 on t2.MyId = t.MyId)

select * 
from cte
where MyDateTime <> RecentDateTime

答案 2 :(得分:0)

不确定您的期望,其他日期或比较结果,但如果您只想比较两个日期的结果,请尝试:

case when (SELECT MAX(MyDateTime)  
          FROM MyTable  
          WHERE MyId = MM.MyId) = MM.MyDateTime 
then 1 else 0 end as isMaxMyDT_eq_myDT