我有以下查询:
SELECT AVG(val) from floatTable
WHERE tagindex IN(1,2,3,4)
AND DateAndTime > '$first_of_year'
它返回到目前为止年份的四个标签测量的所有值的平均值。由于我已经检索了这些数据,如何从本周的第一天开始,从本周的第一天开始以及从午夜开始获取数据?我已将这些日期计算为$ first_of_month,$ first_of_week和$ midnight。我正在尝试最小化查询,并希望有人可以帮助我掀起一些SQL魔法,以便在单个查询或优化的查询集中返回此数据。此查询平均需要300秒,因此我希望尽可能少地完成。
提前谢谢。
答案 0 :(得分: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
上有索引。