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

SQLServerのソリューションは次のとおりです。

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

SQLFiddleでの実例。

于 2012-06-24T16:22:38.727 に答える