1

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

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 结构

源、varchar
目标、varchar
时间、日期时间
状态、varchar

表 B 结构
tstamp、日期时间
源、varchar
目标、varchar

这是相关信息。希望这会有所帮助。

4

1 回答 1

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

SQL Fiddle 上的实时示例。

于 2012-06-24T16:22:38.727 回答