我的圖表含有兩列:persnr和tmstmp, 我怎樣在選擇子句中不用select(...) 的情況下, 計算每個persnr的最後兩個timestamp的差別? 發表於04年8月9日 有其它方法可以解決這個問題。使用theta連接的簡單方法也可以,由於不明數學原因它被稱爲theta連接,這意味它是很簡單的, 因爲它不是同等連接。連接條件包含不平等, 在這個情況下是“小於”比較, 而不是平等比較。 首先, 這個theta連接是一個自我連接, 即圖表連接它自己。更準確地說,第一個條件限制這個連接,這樣只有同樣的persnr的行可以互相連接。第二個條件只接受第一個timestamp少於第二個的可能的組合。 如果第二個條件不清楚地話,請看這個例子,假設我們有5, 7, 9, 和37的值,要做“自我連接”,我們得到: 現在我們加上不平等條件,第一個值必須少於第二個值。 現在我們加入最後的條件,將每組數字按照第一個數字排序分組。我們看到HAVING子句,只得到只有含有一行的組。結果只有一個這樣的組。 9 37 通過採用HAVING子句, 我們可以確保每個t1值只有一個t2值對應。再繼續在SELECT列表處的t2值採用MIN()或MAX()函數。查尋就會將每個persnr的最後一個timestamp和倒數第二的timestamp分開。 剩下要做的事情是將計算最後的timestamp:max(t2.tmstmp) 和倒數第二的timestamp:t1.tmstmp 的差異的表達式加到SELECT列表中。因爲timestamp的日期差異函數在不同的數據庫系統中差別很大, 所以在這裏沒有列出來。 |