SQL fiddle is here這種自左聯接將返回更多的記錄比我預期
希望我的目標很明確:我有一個存儲「從」貨幣一「到」貨幣表, 「買入」和「賣出」匯率以及匯率應適用的日期。
我想獲取所有貨幣的最新匯率列表,直到給定的截止日期。
這意味着:
- 結果應包括「從」 每一行對應一個組合*和「到」貨幣和
- 如果有不止一個行的表 使用「從」和「到」貨幣的特定組合,取出的行 應該是具有最近日期的行。
我正在使用的查詢不這樣做。事實上,目前它似乎要返回一切。
SELECT ce.*
FROM currency_exchange ce
LEFT JOIN currency_exchange newer
ON (
newer.currency_from = ce.currency_from
AND newer.currency_to = ce.currency_to
AND newer.exchange_date > ce.exchange_date
AND newer.exchange_date <= '2012-03-27 00:00:00'
)
WHERE newer.id IS NULL
ORDER BY ce.currency_from, ce.currency_to, ce.exchange_date DESC
*只是爲了澄清:我將「從」和「到」貨幣算作互斥。如果數據庫中有一行指定從貨幣ID 123到貨幣ID 321的匯率,另一行指定貨幣ID 321到貨幣ID 123的匯率,則應返回這兩行。是的,從123到321的購買率在邏輯上相當於從321到123的銷售率,反之亦然。
我發現我的模糊和誤導性的標籤已經爲我更新,現在好多了總結提問內容:我也瞭解到我所查詢的查詢類型通常被稱爲「每個組最大的n」。網上有很好的資源可以簡要描述這些常見的SQL查詢模式嗎?能夠用正確的術語來描述問題是獲得有用幫助的重要一步。 – Wintermute 2013-03-27 09:51:46