在存储过程的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)
如果我可以将比较结果存储到变量中,我可以将此值与其他值进行比较。
不确定为什么我一直收到语法错误或如何解决此问题。任何帮助都会得到新手的赞赏。
答案 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