我有以下查詢的多個時間段:SQL均相同的數據集
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秒,所以我想盡可能少地做到這一點。
預先感謝您。
如果您不想過多地往返數據庫,您可以簡單地將這些平均值放入子查詢中。就我的數學專業來說,平均數不能分開或合併,所以你真的需要在不同的時間段重新計算它們。 – 2010-09-13 18:17:25
@Denis,參見RedFilter的答案。子查詢不需要額外訪問數據庫,但*會*在查詢中需要額外的邏輯讀取 - 因此查詢的總體時間可能長達四倍。至於平均值,大多數SQL版本完全忽略了聚合計算中的NULL值 - 因此RedFilter查詢中的四個不同表達式將被正確計算(因爲不符合條件的值將被評估爲NULL)。 – 2010-09-14 13:33:35
@Mark Bannister,在RedFilter公佈他的答案並立即從中學習並且我想留下我對後人的評論以從我的快速假設中學習時,我默默承認了我的失禮。 – 2010-09-14 14:38:17