1

私は他の質問を読んでいましたが、運がありませんでした。列(スタンプ、値)を持つテーブルがあります。「スタンプ」列には、1 時間ごとのタイムスタンプが格納されます。私がやろうとしているのは、クエリで指定されたタイムスタンプの範囲に応じて、24 時間間隔で SUM(value) を取得することです。

SELECT stamp, 
       Sum(value) 
FROM   table 
WHERE  stamp >= Date_sub('2012-12-02 05:00:00', INTERVAL 1 day) 
       AND stamp < '2013-01-01 05:00:00' 
GROUP  BY Date(stamp) 

私が探している結果は次のようになります。

stamp                      value
2012-12-02 05:00:00        12024
2012-12-03 05:00:00        11211
2012-12-04 05:00:00        19834
...
2013-01-01 05:00:00        10232

実際のテーブルは次のようになります。

stamp                      value
2012-12-01 01:00:00        345
2012-12-01 02:00:00        100
2012-12-01 03:00:00        104
2012-12-01 04:00:00        103
2012-12-01 05:00:00        101
2012-12-01 06:00:00        102
...
2013-01-01 05:00:00        207
2013-01-01 06:00:00        307
2013-01-01 07:00:00        223
...

*スタンプ列のデータ型はタイムスタンプであることに注意してください

4

1 に答える 1

2

範囲と一致させるために、時間を5に設定したいだけだと思います。もしそうなら、あなたはこれを行うことができます:

SELECT cast(date(stamp) as datetime) + interval 5 hour
       Sum(value) 
FROM   table 
WHERE  stamp >= Date_sub('2012-12-02 05:00:00', INTERVAL 1 day) 
       AND stamp < '2013-01-01 05:00:00' 
GROUP  BY Date(stamp) 

しかし、実際にはこれを少し違う言い方にしたいと思うかもしれません:

SELECT cast(date(stamp - interval 5 hour) as datetime) + interval 5 hour
       Sum(value) 
FROM   table 
WHERE  stamp >= Date_sub('2012-12-02 05:00:00', INTERVAL 1 day) 
       AND stamp < '2013-01-01 05:00:00' 
GROUP  BY Date(stamp - interval 5 hour)

これにより、実際には日付が 5 時間境界で再調整されます。

注: これらのクエリはテストされていないため、構文エラーが含まれている可能性があります。

これは、タイムスタンプが実際には日時であることを前提としています。UNIX タイムスタンプの場合は、最初に変換する必要があります。

于 2013-01-23T20:25:23.213 に答える