sql >> データベース >  >> RDS >> PostgreSQL

近くのタイムスタンプに基づいて2つのテーブルを結合します

    「近く」はかなりあいまいです。
    table2に参加するには ここで、timee dateeeから10秒以内にあります 将来:

    SELECT *
    FROM   table1 t1
    LEFT   JOIN table2 t2 ON t2.timee BETWEEN t1.dateee
                                          AND t1.dateee + interval '10 sec';
    
    • LEFT JOIN table1から行を保持します 結果として、table2に一致がなくても 。

    • 複数の一致が存在する可能性があるため、ベーステーブルの各行をさまざまな組み合わせで複数回返すことができます。

    代替

    table1の各行を結合するには 次にタイムスタンプが高い行に移動します。 その通り table1の行ごとに結果の1行 :

    SELECT *
    FROM   table1 t1
    LEFT   JOIN LATERAL (
       SELECT *
       FROM   table2 t2
       WHERE  t2.timee >= t1.dateee
       ORDER  BY t2.timee
       LIMIT  1
       ) ON TRUE;
    

    (timee)のインデックス パフォーマンスには不可欠です。



    1. MYSQLの結果を別々のHTMLテーブルに分割する

    2. Postgresエラー:読み取り用にファイルを開くことができませんでした:アクセスが拒否されました

    3. SQL/MySQL-列の長さによる順序

    4. 文字列を使用してXMLを出力するForeachループ