вот простое решение, которое может помочь вам:
http://sqlfiddle.com/#!4/ed98d/1/0
with
full_august as (
select TO_DATE ('01.AUG.2018 00:00:00', 'DD.MON.YYYY HH24:MI:SS')+level-1 date_
from dual connect by level <= 31),
possible_combinations as (
select f.date_,t.count_,f.date_-t.date_ currentness
from full_august f left outer join t_ t on f.date_ >= t.date_)
select pc.date_,pc.count_
from possible_combinations pc
where pc.currentness = (select min(currentness) from possible_combinations where date_ = pc.date_)
and pc.date_ <= (select max(date_) from t_);
| DATE_ | COUNT_ |
|------------|--------|
| 2018-08-18 | 200 |
| 2018-08-19 | 200 |
| 2018-08-20 | 400 |
| 2018-08-21 | 200 |
| 2018-08-22 | 200 |
| 2018-08-23 | 200 |
| 2018-08-24 | 200 |
| 2018-08-25 | 600 |
| 2018-08-26 | 800 |
Некоторая дополнительная информация, запрошенная @dbusern:
- Вы можете найти структуры таблиц за ссылкой sqlfiddle выше
- Конструкция
connect by
- это «Иерархический запрос», очень мощная конструкция. Но его также можно использовать (ab) для простых вещей, таких как select level from dual connect by level <= 10
, чтобы просто получить числа от 1 до 10.
- * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * 10 * * * * * * * * * * * * * * * * * * * * * * * * * * *1015* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
left join on f.date_ >= t.date_
. * * * * *
- Затем в части
pc.currentness = (select min(currentness)...
мы отбрасываем все результаты, которые не являются самыми последними прошлыми результатами
- Часть
pc.date_ <= (select max(date_)
просто предназначена для удаления дней, которые превышают максимальную дату в t, так как это казалось требованием
Вы можете попробовать каждую часть запроса, добавив выбор между:
with
full_august as (
select TO_DATE ('01.AUG.2018 00:00:00', 'DD.MON.YYYY HH24:MI:SS')+level-1 date_
from dual connect by level <= 31)
select * from full_august;
with
full_august as (
select TO_DATE ('01.AUG.2018 00:00:00', 'DD.MON.YYYY HH24:MI:SS')+level-1 date_
from dual connect by level <= 31),
possible_combinations as (
select f.date_,t.count_,f.date_-t.date_ currentness
from full_august f left outer join t_ t on f.date_ >= t.date_)
select * from possible_combinations;