私はここや他のフォーラムで上記の答えを見つけようとしていました。
与えられたテーブルvaluetable
- ID:somevalues:date_time
- 1:50:2012-10-05 13:00:00
- 2:45:2012-10-05 13:15:00
- 3:35:2012-10-05 13:20:00
- 4:20:2012-10-05 15:00:00
- 5:45:2012-10-05 15:25:00
- 6:35:2012-10-05 15:35:00
など、時間、日、月などでグループ化された対応する日付と時刻とともに、最小値と最大値をどのように見つけますか。
ここでの問題は、SQLグループのGROUPは時間とIN MYSQLのみをグループ化し、セットまたはテーブルで発生する最初の日時を返すことです。他のRDBMSでは実装が異なることを理解しています。したがって、ORDER BYを使用してテーブルを最初に並べ替え、クエリを実行すると、値が最小クエリと最大クエリに対応して昇順と降順で並べ替えられ、1時間あたりの最小値と最大値を選択すると、最初の日付-クエリが選択する時間は、最小値または最大値に関連する時間です。
1時間あたりの最小値と最大値の両方を取得するためのクエリを以下に示します。
SELECT
*
FROM(
SELECT
HOUR(DATE_TIME) AS MINHOUR,
MIN(SOMEVALUES) AS MINVALUES,
DATE_TIME AS MINDATETIME FROM (SELECT * FROM VALUETABLE
WHERE DATE_TIME>'2012-10-05 00:00:00'
AND DATE_TIME<'2012-10-05 23:59:59'
ORDER BY SOMEVALUES
) AS TEMPT1
GROUP BY HOUR(DATE_TIME)
) AS MINVALTABLE
LEFT JOIN (
SELECT
HOUR(DATE_TIME) AS MAXHOUR,
MAX(SOMEVALUES) AS MAXVALUES,
DATE_TIME AS MAXDATETIME FROM
(
SELECT
*
FROM VALUETABLE
WHERE DATE_TIME>'2012-10-05 00:00:00'
AND DATE_TIME<'2012-10-05 23:59:59'
ORDER BY SOMEVALUES DESC
) AS TEMPT2
GROUP BY HOUR(DATE_TIME)) AS MAXVALTABLE
ON MINVALTABLE.MINHOUR=MAXVALTABLE.MAXHOUR;
クエリは次のように出力されます。
- MINHOUR | 最小値| MINDATETIME | MAXHOUR | MAXVALUES | MAXDATETIME
- 13 | 35 | 2012-10-05 13:20:00 | 13 | 50 | 2012-10-05 13:00:00
- 15 | 20 | 2012-10-05 15:00:00 | 15 | 45 | 2012-10-05 15:25:00
親切に、私が何かを逃したかどうか、またはこれを行うためのより良い方法があるかどうかを知らせてください。
私が理解しているように、クエリは同様に日、月などでグループ化するために使用できます。