SQL-显示一条记录是否在另一条记录之后创建
我希望能够检查在创建初始记录之后是否创建了特定的记录(在本例中为“under”),并以单独的形式显示该记录,其中包含“under”或null 示例数据SQL-显示一条记录是否在另一条记录之后创建,sql,ssms,Sql,Ssms,我希望能够检查在创建初始记录之后是否创建了特定的记录(在本例中为“under”),并以单独的形式显示该记录,其中包含“under”或null 示例数据 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
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'
根据您的实际数据,事情可能会变得更复杂。例如,对于任何给定的名称,“UNDER”是否可以出现多次?如果出现,您是只想看到一次,还是每次出现一次?无论如何,这是一个很好的起点,因为您的示例数据。TIMESTAMPDIFF可能是一个有用的函数。@fungusanthrax
TIMESTAMPDIFF()
is MySQL…“Under”在某些情况下会出现多次,但可以通过“name”或“received”进行过滤,以便只显示我正在查找的相关数据。谢谢您,这两个示例都很好地工作了。(也很抱歉回复太晚)
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'