0
「時間」「ID」「パラメータ」「値」
"2014-02-18 18:58:00"、"1$SGP"、"A"、"415.7806091308594"
"2014-02-18 18:58:00"、"1$SGP"、"B"、"240.3373565673828"
"2014-02-18 18:58:00"、"2$SGP"、"A"、"393.191162109375"
"2014-02-18 18:58:00"、"2$SGP"、"B"、"50.10090637207031"
"2014-02-18 18:58:00"、"3$SGP"、"E"、"3484841472"
"2014-02-18 18:05:01"、"1$SGP"、"A"、"0"
"2014-02-18 17:58:01"、"1$SGP"、"B"、"0"
"2014-02-18 17:58:01"、"2$SGP"、"C"、"0"
"2014-02-18 17:58:01"、"2$SGP"、"D"、"0"
"2014-02-18 17:58:01"、"2$SGP"、"E"、"3061691904"
"2014-02-18 17:57:01"、"3$SGP"、"A"、"0"
"2014-02-18 17:57:02"、"3$SGP"、"B"、"0"

上記のデータを持つテーブル Foo から、特定の ID について、18:00 の間に来た最後のタイムスタンプから値を取得するように、すべての異なる ID のパラメータ「A」の値を合計する必要があります。 :00 と 19:00:00。時間と id フィールドの両方がインデックス化されていることを考慮して、この要件に対して高速な単一のクエリを作成する方法。

4

1 に答える 1

0

時間までに抽出したいので苦労すると思いますが、日付/時刻フィールドにインデックスを付けています。

しかし、このような何かがそれを行う必要があります:-

SELECT SUM(value)
FROM foo
INNER JOIN
(
    SELECT id, MAX(`time`) AS maxtime
    FROM foo
    WHERE TIME(`time`) BETWEEN '18:00:00' AND '19:00:00'
    AND parameter = 'A'
    GROUP BY id
) sub1
ON foo.id = sub1.id
AND foo.`time` = sub1.maxtime
于 2014-03-25T16:39:26.000 に答える