2

私はここや他のフォーラムで上記の答えを見つけようとしていました。

与えられたテーブル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

親切に、私が何かを逃したかどうか、またはこれを行うためのより良い方法があるかどうかを知らせてください。

私が理解しているように、クエリは同様に日、月などでグループ化するために使用できます。

4

1 に答える 1

0

このクエリを最大限に試してください

SELECT
    t.id,
    DATE_FORMAT(lt.datetime, '%H') as Hour,
    DATE_FORMAT(lt.datetime, '%d') as Day,
    DATE_FORMAT(lt.datetime, '%m') as Month
FROM table as t
LEFT JOIN (SELECT MAX(id),datetime FROM table)  as lt ON lt.id = t.id
GROUP BY Month , Day , Hour

それがあなたが望むものではない場合は、質問を明確にしてください

于 2012-10-05T06:22:06.437 に答える