RDBMS在基於集合的邏輯上工作得最好。因此,認爲該數據的兩套術語:
- W2:一組包含的最高溫度爲給定的一天
- 數據的寬:包含一段時間
所有測量數據的宇宙
通過加入這兩組數據,我們可以從w獲得具有給定日期的最高溫度的數據。
通過對整個宇宙集{w}使用內聯視圖{w2},我們可以生成每天最大溫度,然後返回基本集{w}以獲取每天最大溫度的時間信息。
這假定:
- 如果最高溫度是在多個記錄在同一天,你希望它們都因爲你還沒有表示如何處理關係。
- datestamp有一個時間組件;這是您想要在一天中查看最高溫度的日期/時間。
這是別人的意思加入最有可能的:
- 日(郵戳)只是返回的日期/時間的日期部分。
- MAX()返回由表示的基團的最高溫度(在郵戳的這種情況下,日期)
。
SELECT datestamp, Temp
FROM weather W
INNER JOIN (SELECT date(datestamp) mDate, max(temp) as mtemp
FROM weather
GROUP BY Date(DateStamp)) W2
on W.temp = W2.mtemp
and Date(w.Datestamp) = w2.mDate
附加信息: MySQL不支持它也可以用來解決這個問題有可能更高的性能cross apply
也不分析功能row_number() Over (partition by date(datestamp) order by temp desc)
。 SQL Server,Oracle,DB2,Postgresql都有不同的解決方法;然而上面的例子適用於所有RDBMS引擎(我能想到);但在所有情況下都不是最有效率的。
你想如何處理關係?所以如果一個datestamp在同一天有10個記錄,其中4個具有相同的tempature,你是否想要所有4個datestamps?只有一個?如果哪一個? – xQbert