SQL - 显示是否在另一条记录后创建了一条记录
问题描述:
我希望能够检查某个特定的记录(在本例中,“under”是在创建一个初始记录后创建的, “下”或空。SQL - 显示是否在另一条记录后创建了一条记录
示例数据
Received Name Sub
01-Jun Mike Over
01-Jun John Over
02-Jun Dave Between
03-Jun Pete Over
02-Jun Mike Under
03-Jun Dave Under
预期的效果
Received Name Sub Sub2
01-Jun Mike Over Under
01-Jun John Over Null
02-Jun Dave Between Under
03-Jun Pete Over Null
我从这个代码工作,但它很可怕的错误,我不能见树不见林了。
DECLARE @TM DATETIME;
SET @TM = DATEADD(MONTH, DATEDIFF(MONTH, '19000101', GETDATE()), '19000101');
select
t1.received,
t1.name,
t1.sub,
t2.sub as sub2
from
dbo.tblOpen t1
join dbo.tblOpen t2 on t1.name = t2.name
where
t1.closed >= DATEADD(MONTH, -1, @TM)
请问我可以在这里得到一个正确的方向。
答
很多方法来处理这一个。
相关子查询应该工作:
SELECT t1.received,
t1.name,
t1.sub,
CASE WHEN EXISTS (SELECT *
FROM dbo.tblOpen t2
WHERE t2.Name = t1.Name
AND t2.received > t1.received
AND t2.sub = 'UNDER')
THEN 'UNDER'
END AS sub2
FROM dbo.tblOpen t1
WHERE t1.sub <> 'UNDER'
还是一个LEFT JOIN
:
SELECT t1.received,
t1.name,
t1.sub,
t2.sub as sub2
FROM dbo.tblOpen t1
LEFT JOIN dbo.tblOpen t2 ON t2.Name = t1.Name
AND t2.received > t1.received
AND t2.sub = 'UNDER'
WHERE t1.sub <> 'UNDER'
根据您的实际数据,事情可能会变得更加复杂。例如,对于任何给定的名称,'UNDER'是否可以多次出现?如果是这样,你只想看一次,或每次出现一次?无论如何,根据您的示例数据,这是一个很好的起点。
+0
'Under'在某些场合确实会出现不止一次,但可以通过'name'或'received'进行过滤,以便它只显示我正在查找的相关数据。谢谢你们两个例子的完美运作。 (对于迟到的回复也很抱歉) – Michael
TIMESTAMPDIFF可能是一个有用的功能。 – fungusanthrax
@fungusanthrax'TIMESTAMPDIFF()'是MySQL ... –