加入 2 个日期最接近的桌子

问题描述 投票:0回答:1

我的查询需要一些帮助,我希望这里的任何人都可以帮助我。

我有两张桌子,看起来像这样:

T1

| Ordernr  | Itemnr   | Price    | Date         | Currency |
| -------- | -------- | -------- | ------------ | -------- |
| 1        | aaa      | 10       | 2024-04-15   | EUR      |
| 1        | bbb      | 20       | 2024-04-15   | EUR      |
| 1        | ccc      | 15       | 2024-04-15   | EUR      |
| 2        | aaa      | 20       | 2024-04-16   | USD      |
| 2        | bbb      | 20       | 2024-04-16   | USD      |
| 3        | aaa      | 20       | 2024-04-16   | EUR      |
| 3        | bbb      | 20       | 2024-04-16   | EUR      |

T2

| Currency | Date         | ExchangeRate
| -------- | ------------ | ------------
| EUR      | 2024-04-17   | 10,4
| USD      | 2024-04-17   | 11,0
| EUR      | 2024-04-16   | 10,3
| USD      | 2024-04-16   | 11,1
| EUR      | 2024-04-14   | 10,2
| USD      | 2024-04-14   | 11,2

正如您在 t2 中看到的,缺少一些日期,在本例中

2024-04-15

在我的查询中,我想从 t1 获取完整订单价格,并将其乘以与 t2 中的日期和货币相匹配的汇率,如果 t2 中缺少日期,我想匹配下面最接近的日期。

这是我到目前为止得到的:

Select 
 t1.Ordernr, 
 t1.Date,
 Sum(t1.Price * t2.ExchangeRate) as Orderprice,
 t2.ExchangeRate

from t1 
inner join t2
  on t1.Currency = t2.Currency
  and t1.Date = t2.Date

Group by t1.Date, t1.Ordernr, t1.Price, t2.ExchangeRate

结果如下:

| Ordernr  | Date         | Orderprice   | ExchangeRate
| -------- | ------------ | ------------ | ------------
| 1        | 2024-04-15   | Null         | Null
| 2        | 2024-04-16   | 444          | 11,1
| 3        | 2024-04-16   | 412          | 10,3

但我想要这个结果:

| Ordernr  | Date         | Orderprice   | ExchangeRate
| -------- | ------------ | ------------ | ------------
| 1        | 2024-04-15   | 459          | 10,2
| 2        | 2024-04-16   | 444          | 11,1
| 3        | 2024-04-16   | 412          | 10,3

我明白为什么我得到空值,但我不知道如何得到我想要的结果。 这里有人可以帮我查询吗?

mysql
1个回答
0
投票

这样的东西有用吗? (只是一个简单的想法,查询未经测试)

SELECT 
    t1.Ordernr, 
    t1.Date,
    SUM(t1.Price * t2.ExchangeRate) as Orderprice,
    t2.ExchangeRate
FROM 
    t1 
INNER JOIN t2
    ON 
        t1.Currency = t2.Currency
    AND 
        t1.Date = (
            SELECT 
                subt2.Date
            FROM 
                t2 AS subt2
            WHERE 
                subt2.Date >= t1.Date
            ORDER BY 
                subt2.Date ASC 
            LIMIT 1
        )
GROUP BY
    t1.Date, t1.Ordernr, t1.Price, t2.ExchangeRate
© www.soinside.com 2019 - 2024. All rights reserved.