Как я могу сложить значение в течение периода, определенного другой таблицей? - PullRequest
0 голосов
/ 08 апреля 2020

Table example

как я могу сложить значения в таблице 2, которая находится между датой в таблице 1? Спасибо!

Ответы [ 2 ]

0 голосов
/ 11 апреля 2020

С самостоятельным объединением и агрегацией:

select t.startdate, t.enddate,
  sum(value) addupvalue
from (
  select 
    t.date startdate, 
    case 
      when min(tt.date) = max(m.date) then max(m.date)
      else date_sub(min(tt.date), interval 1 day) 
    end enddate
  from table1 t inner join table1 tt
  on tt.date > t.date
  cross join (select max(date) date from table1) m
  group by t.date 
) t 
inner join table2 t2
on t2.date between t.startdate and t.enddate
group by t.startdate, t.enddate
order by t.startdate desc

См. Демоверсию . Результаты:

| startdate  | enddate    | addupvalue |
| ---------- | ---------- | ---------- |
| 2020-04-01 | 2020-04-08 | 37         |
| 2020-03-25 | 2020-03-31 | 29         |
0 голосов
/ 08 апреля 2020

Вы можете использовать lead() (или lag()) для генерации интервалов из table1, затем присоединиться к table2 и агрегировать по интервалу:

select
    t1.start_date,
    t1.end_date,
    sum(t2.value) add_up_value
from (
    select date start_date, lead(t1.date) over(order by date) end_date
    from table1
) t1
inner join table2 t2
    on t2.date >= t1.start_date and t2.date < t1.end_date
group by t1.start_date, t2.end_date
...