SQL-显示一条记录是否在另一条记录之后创建

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

我希望能够检查在创建初始记录之后是否创建了特定的记录(在本例中为“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    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'