3

私は生産測定値のテーブルを持っており、各時間の分 (タイムスタンプ) の行を含む結果セットを取得する必要があります。列のレイアウトは非常に単純です: ID,TIMESTAMP,SOURCE_ID,SOURCE_VALUE

データ サンプルは次のようになります。

123,'2013-03-01 06:05:24',PMPROD,12345678.99
124,'2013-03-01 06:15:17',PMPROD,88888888.99
125,'2013-03-01 06:25:24' ,PMPROD,33333333.33
126,'2013-03-01 06:38:14',PMPROD,44444444.44
127,'2013-03-01 07:12:04',PMPROD,55555555.55
128,'2013-03-01 10: 38:14',PMPROD,44444444.44
129,'2013-03-01 10:56:14',PMPROD,22222222.22
130,'2013-03-01 15:28:02',PMPROD,66666666.66

レコードは 1 日を通してこのテーブルに追加され、source_value は既に計算されているため、合計は必要ありません。

current_date の1 時間ごとに min(timestamp) の行を取得する方法がわかりません。

select *
from source_readings
use index(ID_And_Time)
where source_id = 'PMPROD'
and   date(timestamp)=CURRENT_DATE
and   timestamp =
        ( select min(timestamp) 
            from source_readings use index(ID_And_Time)
            where source_id = 'PMPROD'
        )

もちろん、上記のコードでは 1 つのレコードが得られます。current_date の min(hour(timestamp)) のレコードが 1 つ必要です。

結果セットには、ID 123、127、128、130 の行が含まれているはずです。私は何時間もそれで遊んだ。誰が私のヒーローになることができますか? :)

4

3 に答える 3

2

以下を試してください:

SELECT * FROM source_readings 
JOIN 
(
   SELECT ID, DATE_FORMAT(timestamp, '%Y-%m-%d %H') as current_hour,MIN(timestamp) 
   FROM source_readings 
   WHERE source_id = 'PMPROD'
   GROUP BY current_hour
) As reading_min
ON source_readings.ID = reading_min.ID
于 2013-03-01T17:44:53.557 に答える
1
SELECT  a.*
FROM    Table1 a
        INNER JOIN
        (
            SELECT  DATE(TIMESTAMP) date, 
                    HOUR(TIMESTAMP) hour,
                    MIN(TIMESTAMP) min_date
            FROM    Table1
            GROUP   BY DATE(TIMESTAMP), HOUR(TIMESTAMP)
        ) b ON DATE(a.TIMESTAMP) = b.date AND
                HOUR(a.TIMESTAMP) = b.hour AND
                a.timestamp = b.min_date
于 2013-03-01T18:02:42.413 に答える