我有两个表:表A和表B
RowId
列。 ModifiedAt
列。 Key
的列。检查条件:
Table A
获取检索到的行ID,并检查这些行的ModifiedAt
字段是否为>表B的ModifiedAT字段具有相同的rowId。表B
没有重复RowId,但表A
没有。
我自己尝试了什么:
select *
from dbo.ResultsStored rs
WHERE HashedKey = hashbytes('MD5', @StringConcat)
and
rs.ModifiedAT > (select Max(ModifiedAt)
from dbo.Patients P
where P.RowId = rs.RowId)
注意:
另外,让我感到惊讶的是,如果我用硬编码的值替换rs.RowId
说'1',它可以工作但不是这样。
当我对rs.RowId进行硬编码时的结果:
if not exists (select * from dbo.ResultsStored RS where RS.HashedKey = 0xBBE4D4DC92C713756E6683ADD671F7DA and ModifiedAt > (select ModifiedAt from dbo.Patients where RowId = 1))
begin
print'not exists'
end
else
begin
print 'exists'
end
输出:不存在
if not exists (select * from dbo.ResultsStored RS where RS.HashedKey = 0xBBE4D4DC92C713756E6683ADD671F7DA and ModifiedAt > (select ModifiedAt from dbo.Patients where RowId = rs.RowId))
begin
print'not exists'
end
else
begin
print 'exists'
end
OUTPUT
:存在
预期输出:不存在
我可以请一点帮助吗?
答案 0 :(得分:1)
问题在于您的数据。 如果我理解正确,你想知道结果中是否有这样的行哪个日期更大,那么患者约会。如果没有找到这样的行,那就没关系。
如果是,您的查询看起来是正确的。您可以通过以下方式直接选择不正确的数据:
SELECT *
FROM Patients p
CROSS APPLY ( SELECT MAX(ModifiedAt) AS ModifiedAt
FROM ResultsStored rs
WHERE p.RowId = rs.RowId
) a
WHERE a.ModifiedAt > p.ModifiedAt
答案 1 :(得分:-1)
DECLARE @RowId INT
从患者中选择RowId的DECLARE CurRowId CURSOR
OPEN CurRowId
FETCH NEXT FROM CurRowId INTO @RowId
WHILE @@ FETCH_STATUS = 0
BEGIN
如果不存在(从dbo.ResultsStored中选择*,其中ModifiedAt>
(select ModifiedAt from dbo.Patients where RowId =
@RowId))
开始
print'not exists'
end
else
begin
print 'exists'
END
FETCH NEXT FROM CurRowId INTO @RowId
END