簡體   English   中英

選擇日期為max(date)小於x的數據

[英]select data where date is max(date) less than x

我有2張桌子第一張有匯率:

  | date  | ratio | currency |
------------------------------
 1|  9/09 |   1.0 | EUR      |
 2|  9/09 |   1.1 | USD      | -- no weekend
 3| 12/09 |   1.0 | EUR      | -- goes from 9 to 12
 4| 12/09 | 120.0 | JPY      |

第二個有交易

  | date  | amount | currency |
------------------------------
 1|  9/09 |  20.0   | EUR      |
 2|  9/09 | 101.0   | USD      | -- weekend
 3| 10/09 |   1.0   | USD      | -- has 10/09 which is a saturday
 4| 10/09 |  10.0   | USD      |

兩者都包含日期和貨幣。 就目前而言,我的匯率在周末不會更新,並且不會改變。

我正在尋找一種高性能的方法來選擇要放入exchange_rate表中的最后一個可用數據。 換句話說,就是缺少日期的最后一天。(示例中為10/09)

我正在使用交易表來獲取需要匯率信息的天數列表,以便可以將所有貨幣轉換為歐元。

想要的完整結果應該是這樣的

  | date  | amount | currency | ratio |
----------------------------------------
 1|  9/09 |  20.0   | EUR      |  1.0  |
 2|  9/09 | 101.0   | USD      |  1.1  |   -- already exists in exchange_rate
 3| 10/09 |   1.0   | USD      |  1.1  |   -- selected because 9/09 is last available line
 4| 10/09 |  10.0   | USD      |  1.1  |

另外,我也可以使用需要的數據來更新exchange_rate表的查詢,因為最終查詢會更簡潔,以后更易於維護

您可以使用相關子查詢來執行此操作:

select t.*,
       (select er.ratio
        from exchangerates er
        where er.date <= e.date and er.currency = t.currency
        order by er.date desc
        limit 1
       ) as ratio
from transactions t;

為了提高性能,您需要exchangerates(currency, date, ratio)的索引。

我將從此開始,看看它是否滿足您的需求。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM