Redshift: получение данных из таблицы продаж на основе диапазонов дат из другой таблицы - PullRequest
0 голосов
/ 16 июня 2020

Моя таблица t1 содержит товар и время выполнения (время доставки товара от поставщика). Моя таблица t2 содержит дату продажи товаров за последние 60 дней. Мне нужно добавить столбец в T1 с общими продажами из T2 за последние дни выполнения заказа. Другими словами, я хочу рассчитать время выполнения заказа, когда время выполнения заказа разное для каждого товара. Мои таблицы в Redshift.

T1

|---------------------|------------------|
|      item_no        |     Lead Time    |
|---------------------|------------------|
|    10002341         |         7        |
|---------------------|------------------|
|    10002342         |         5        |
|---------------------|------------------|

T2

|---------------------|------------------|
|      item_no        |   Date of sale   | Amount of Sale
|---------------------|------------------|
|    10002341         |   11-06-2020     |   $100
|---------------------|------------------|
|    10002341         |    12-06-2020    |   $200
|---------------------|------------------|

1 Ответ

0 голосов
/ 16 июня 2020

Один вариант использует боковое соединение:

select t1.*, x.*
from t1
left join lateral (
    select coalesce(sum(amount), 0) lead_amount
    from t2
    where 
        t2.item_no = t1.item_no 
        and t2.date_of_sale >= current_date - t1.lead_time * interval '1 day'
) x on true

Если ваша база данных не поддерживает боковые соединения, тогда другой вариант - коррелированный подзапрос:

select 
    t1.*, 
    (
        select coalesce(sum(amount), 0) 
        from t2
        where 
            t2.item_no = t1.item_no 
            and t2.date_of_sale >= current_date - t1.lead_time * interval '1 day'
    ) lead_amount
from t1
...