2016-11-24 15 views
3

私は、1時間ごとに1行を取得しようとしています。MySQL 1日の1時間あたり1行

これまでのところ、私はこの解決策を見つけましたが、これを行うのは簡単な方法です。

SElECT addtime('2016-01-22 00:00:00', t0.i) myHour 
FROM (
    SELECT '00:00:00' i 
    UNION SELECT '01:00:00' 
    UNION SELECT '02:00:00' 
    UNION SELECT '03:00:00' 
    UNION SELECT '04:00:00' 
    UNION SELECT '05:00:00' 
    UNION SELECT '06:00:00' 
    UNION SELECT '07:00:00' 
    UNION SELECT '08:00:00' 
    UNION SELECT '09:00:00' 
    UNION SELECT '10:00:00' 
    UNION SELECT '11:00:00' 
    UNION SELECT '12:00:00' 
    UNION SELECT '13:00:00' 
    UNION SELECT '14:00:00' 
    UNION SELECT '15:00:00' 
    UNION SELECT '16:00:00' 
    UNION SELECT '17:00:00' 
    UNION SELECT '18:00:00' 
    UNION SELECT '19:00:00' 
    UNION SELECT '20:00:00' 
    UNION SELECT '21:00:00' 
    UNION SELECT '22:00:00' 
    UNION SELECT '23:00:00' 
) t0 
+3

これは良い解決策です。 (または、この値のテーブルを作成して参加することができます) – scaisEdge

答えて

3

これは少しだけsmaler:

SELECT '2016-01-22 00:00:00' + INTERVAL (d0*10+d1) hour AS mydate 
FROM (
SELECT 0 AS d0 UNION SELECT 1 UNION SELECT 2 
) AS t1 
cross JOIN (
SELECT 0 AS d1 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 t2 
WHERE (d0*10+d1) < 24 
order by d0,d1; 

しかし!!、あなたはMariaDBを使用できる場合は、シーケンス・エンジンを使用して、このようにそれを行うことができます。

SELECT '2016-01-22 00:00:00' + INTERVAL seq HOUR as mydate from seq_0_to_23; 

mydate 
2016-01-22 00:00:00 
2016-01-22 01:00:00 
2016-01-22 02:00:00 
2016-01-22 03:00:00 
2016-01-22 04:00:00 
2016-01-22 05:00:00 
2016-01-22 06:00:00 
2016-01-22 07:00:00 
2016-01-22 08:00:00 
2016-01-22 09:00:00 
2016-01-22 10:00:00 
2016-01-22 11:00:00 
2016-01-22 12:00:00 
2016-01-22 13:00:00 
2016-01-22 14:00:00 
2016-01-22 15:00:00 
2016-01-22 16:00:00 
2016-01-22 17:00:00 
2016-01-22 18:00:00 
2016-01-22 19:00:00 
2016-01-22 20:00:00 
2016-01-22 21:00:00 
2016-01-22 22:00:00 
2016-01-22 23:00:00 
+0

MariaDBスニペットありがとうございました。完璧に動作します! – Virik

+0

これは、2つの日付の間に1日ごとに1つの行を作成するためにも使用できますか? – Virik

+0

このようなものはありません:** SELECT '2016-01-22 00:00:00' +間隔seq day from seq_0_to_9999 ここで、DATEDIFF( '2016-02-22'、 '2016-01-22')> = seq; ** –

0

これは私が以前から学んだトリックです。唯一のコインは、24行以上のテーブルを参照する必要があります。それは、とにかくそれを結合で使用したいからです。

select 
    addtime('2016-01-22 00:00:00', concat(@ num: [email protected] num + 1, ':00:00')) date 
from 
    table, 
    (
     select 
     @ num: =- 1 
    ) 
    num limit 24 
関連する問題