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

私のSQLデータベースの2つのタイムスタンプレコード間のすべてのタイムスタンプ値の間隔を1分ごとに見つける方法

    https://stackoverflow.com/a/45992247/7616138 の助けを借りて MySQLでシリーズを生成するには、いじくりまわします これを作成するために:

    テーブルがentriesと呼ばれると仮定します 、次のクエリは、要求した結果を生成します。このクエリは、クロス結合を使用して一連の分を構築するため、あまり効率的ではないことに注意してください。間隔が大きい場合は、クロス結合を延長する必要があります。

    SELECT 
        a.*, 
        DATE_ADD(DATE_SUB(a.open_date, INTERVAL SECOND(a.open_date) SECOND), INTERVAL gen_time MINUTE) AS gen_date_time
    FROM 
        entries AS a
        LEFT JOIN
            (
                SELECT
                    m3 * 1000 + m2 * 100 + m1 * 10 + m0 AS gen_time
                FROM
                    (SELECT 0 m0 UNION SELECT 1 UNION SELECT 2 UNION SELECT 3 UNION SELECT 4 UNION SELECT 5 UNION SELECT 6 UNION SELECT 7 UNION SELECT 8 UNION SELECT 9) AS m0,
                    (SELECT 0 m1 UNION SELECT 1 UNION SELECT 2 UNION SELECT 3 UNION SELECT 4 UNION SELECT 5 UNION SELECT 6 UNION SELECT 7 UNION SELECT 8 UNION SELECT 9) AS m1,
                    (SELECT 0 m2 UNION SELECT 1 UNION SELECT 2 UNION SELECT 3 UNION SELECT 4 UNION SELECT 5 UNION SELECT 6 UNION SELECT 7 UNION SELECT 8 UNION SELECT 9) AS m2,
                    (SELECT 0 m3 UNION SELECT 1 UNION SELECT 2 UNION SELECT 3 UNION SELECT 4 UNION SELECT 5 UNION SELECT 6 UNION SELECT 7 UNION SELECT 8 UNION SELECT 9) AS m3
                ORDER BY
                    gen_time asc
            ) AS b ON (DATE_ADD(a.open_date, INTERVAL gen_time MINUTE) <= a.close_date)
    ORDER BY
        a.id,
        gen_date_time
    

    説明:

    SELECT 0 m0 UNION SELECT 1 UNION SELECT 2 UNION SELECT 3 UNION SELECT 4 UNION SELECT 5 UNION SELECT 6 UNION SELECT 7 UNION SELECT 8 UNION SELECT 9のような各行 0から9までの数字を生成します。これらの線のいくつかを交差結合すると、これらの数字のすべての可能な組み合わせが得られます。各行を使用して、open_dateに追加する分数の特定の桁を生成します (m3 * 1000 + m2 * 100 + m1 * 10 + m0 )。この一連の分は、間隔に収まる分だけを使用してエントリテーブルに結合されます(DATE_ADD(a.open_date, INTERVAL gen_time MINUTE) <= a.close_date )。 SELECTopen_date 分に丸められます(DATE_SUB(a.open_date, INTERVAL SECOND(a.open_date) SECOND) )および分数が追加されます(DATE_ADD(..., INTERVAL gen_time MINUTE)

    想定されるスキーマとサンプルデータ:

    CREATE TABLE entries (
      id INT AUTO_INCREMENT PRIMARY KEY,
      open_date TIMESTAMP,
      close_date TIMESTAMP
    );
    
    INSERT INTO entries (open_date, close_date) VALUES
      ("2019-07-03 16:28:39.497", "2019-07-04 16:28:39.497"),
      ("2019-07-04 15:28:39.497", "2019-07-05 19:28:39.497");
    



    1. 不正な文字列オフセット'name'laravel

    2. 警告:ストリームを開くことができませんでした:17行目のC:\ wamp \ www \ laravel \ bootstrap\autoload.phpにそのようなファイルまたはディレクトリはありません

    3. javaデタッチされたオブジェクトに対する不要なクエリをHibernateします

    4. COALESCEとISNULLのどちらが速いですか?