2

次のクエリがあります。

SELECT AVG(val) from floatTable
WHERE tagindex IN(1,2,3,4)
AND DateAndTime > '$first_of_year'

これは、年初来のこれら 4 つのタグについて測定されたすべての値の平均値を返します。すでにこのデータを取得しているので、月初、週初、および午前 0 時以降のデータを取得するにはどうすればよいですか? これらの日付は、$first_of_month、$first_of_week、および $midnight として計算されています。私はクエリを最小限に抑えようとしていますが、このデータを単一のクエリまたは最適化された一連のクエリで返すために、誰かが SQL マジックを作成するのを手伝ってくれることを望んでいました。このクエリには平均 300 秒かかるため、できるだけ短くしたいと考えています。

前もって感謝します。

4

1 に答える 1

5
SELECT AVG(case when DateAndTime > '$first_of_year' then val end) as FirstOfYear,
       AVG(case when DateAndTime > '$first_of_month' then val end) as FirstOfMonth,
       AVG(case when DateAndTime > '$first_of_week' then val end) as FirstOfWeek,
       AVG(case when DateAndTime > '$midnight' then val end) as Midnight
from floatTable 
WHERE tagindex IN(1,2,3,4) 
    and DateAndTime > '$first_of_year' 

パフォーマンスを向上させるには、列DateAndTimeおよびにインデックスがあることを確認してくださいtagIndex

于 2010-09-13T18:14:21.440 に答える