• 締切済み

SQL select 2つの日時データの結合

SQLで2つの日時データについて、片方の日時に一番近い別データのレコードを結合して抜き出したいです。 <Table1> 日時A data1 2020/07/01 10:00:00 1000 2020/07/01 11:00:00 1000 <Table2> 日時B col1 2020/07/01 9:50:00 AAA 2020/07/01 10:05:00 BBB 2020/07/01 11:10:00 CCC 上記2つのようなデータがある場合、下記のようなSELECT結果を取得したいです。 日時A data1 日時B col1 2020/07/01 10:00:00 1000 2020/07/01 9:50:00 AAA 2020/07/01 11:00:00 1000 2020/07/01 10:05:00 BBB この場合、どのような構文を使用したらよいでしょうか? お手数ですが、よろしくお願いいたします。

みんなの回答

  • mpro-gram
  • ベストアンサー率74% (170/228)
回答No.1

postgreSQLは持ってないので、とりあえずmariadb10だと日付関数timediff使って日付の差を計算。 table1の日付カラム名 d1 , table2の日付カラム名d2 でとりあえず書いたので適宜編集してください with tn3 as ( select t1.d1 , (select min(abs( timediff(t2.d2,t1.d1) )) near2 from table2 as t2) as near2 from table1 as t1 ) select t0.* , t4.* from table1 as t0 inner join tn3 on t0.d1= tn3.d1 left join table2 as t4 on t4.d2 = subtime(t0.d1, tn3.near2) or t4.d2= addtime(t0.d1, tn3.near2); PostgreSQL だと age() 関数かな?時刻の差し引きもしてくれるのかは不明。 interval 型で返ってくるらしいので、日付の足し引きは、  t4.d2 = t0.d1+ interval tn3.near2 or t4.d2 = t0.d1 - interval tn3.near2 でいけるようです。 withやサブクエリ構文はたぶん同じはず。