-2

以下のデータに基づいて、1 時間あたりの使用量を知りたいです。

TIME        DATA
00:00:24    3198
00:17:42    3199
00:44:54    3200
01:24:24    3201
01:52:24    3202
02:27:18    3203
02:51:06    3204
03:28:30    3205

次のようなクエリを使用する場合:

SELECT
    left(TIME,2) AS hour,
    max(DATA) - min(DATA) as usage
    FROM my_table
GROUP BY hour

MySQL は最大値と比較して時間範囲の最小値のみを参照するため、誤った値が取得されます。結果は次のとおりです。

hour     usage
00       2
01       1
02       1
03       0

データを手動で見て、それを手で合計すると、次のようになります。

TIME        DATA    Usage (summed by hand)
00:00:24    3198        
00:17:42    3199        
00:44:54    3200    2 
01:24:24    3201        
01:52:24    3202    3  
02:27:18    3203        
02:51:06    3204    2
03:28:30    3205    1

これを MySQL で直接解決する方法はありますか、それとも PHP でループを作成する必要がありますか? (編集されたクエリと明確化された結果と期待される結果)

4

3 に答える 3

0

この解決策を検討してください。

SELECT LEFT(time, 2) AS `hour`, COUNT(LEFT(time, 2)) AS `count`
FROM tbl
GROUP BY `hour`

tblテーブルの名前に置き換える必要があります。

于 2013-07-09T17:36:30.767 に答える
0

次のクエリを確認してください。

SELECT A.TIME , A.DATA , CASE WHEN B.USAGE IS NULL THEN NULL ELSE USAGE END AS USAGE
FROM
USAGE AS A
LEFT OUTER JOIN
(
SELECT LEFT(TIME , 2) AS TIMEINHOUR ,  
MAX(TIME) AS MAXTIME , MAX(DATA) - MIN(DATA) AS USAGE
FROM USAGE
GROUP BY LEFT(TIME , 2)
) AS B ON A.TIME = B.MAXTIME
于 2013-07-09T17:50:19.540 に答える