SQL,如何在列A中找到<当前行的B列中的时间

时间:2012-06-24 16:19:28

标签: sql time comparison max

我在找到一个我认为直截了当的解决方案时遇到了问题。这是我想要做的一个例子。

TABLE A  
time  |  state  
10:00 |   up  
10:09 |  down  
10:12 |   up  

TABLE B  
time  |  data  
10:05 |  abc  
10:07 |  def  
10:11 |  ghi  

我想连接表A和B,维护B中的所有数据,如

SELECT tableB.time, tableB.data, tableA.status  
INTO my_results  
FROM tableB  
LEFT JOIN tableA  
WHERE tableB.time > (MAX(tableA.time) < tableB.time)  

所以my_results表如下所示:

TABLE my_results  
time  |  data  | state  
10:05 |  abc   |  up  
10:07 |  def   |  up  
10:11 |  ghi   | down  

表A结构

source,varchar
目的地,varchar
时间,日期时间
status,varchar

表B结构
tstamp,datetime
来源,varchar
destination,varchar

这是相关信息。希望这很有用。

1 个答案:

答案 0 :(得分:4)

这是SQL Server的解决方案:

select  b.time
,       b.data
,       a.state
from    B
outer apply
        (
        select  top 1 *
        from    A
        where   A.time < B.time
        order by
                A.time desc
        ) as A

Live example at SQL Fiddle.