Один предназначен для наличных , а другой - для этапа со следующей структурой
Наличных
FileID Cash Date
1 50 03.04.2017
2 100 08.07.2015
3 70 14.09.2018
Этап
FileID Stage Date_of_stage
1 Finished 06.04.2016
1 In Process 08.07.2015
2 Complication 17.08.2018
2 In Process 14.03.2018
Хотя в моих таблицах гораздо больше строк.Итак, я присоединяюсь к этим двум таблицам, потому что я хочу сгруппировать денежные средства по этапам с помощью этого выбора:
select fileID, date, cash, max(date_of_stage) as max_date
from (select c.fileID, c.date, c.cash, s.stage, s.date_of_stage
from cash c
inner join stage s
on c.fileID=s.fileID
and s.date_of_stage < c.date
) x
group by fileID, date, cash
Мне нужен только максимум (date_of_stage), потому что это логически имеет смысл для нашего отчета, и это не частьвопрос в любом случае.
Дело в том: когда я сравниваю общую сумму денег из таблицы cash и вышеупомянутого выбора, я получаю немного меньшую общую сумму из вышеупомянутого выбора, чем из наличные стол (7 миллионов из наличные и 6,9 миллионов из вышеупомянутого выбора).Сейчас я пытаюсь определить недостающие записи, используя левое соединение:
select *
from (select fileID, date, cash
from cash) x
left join
(select fileID, date, cash, max(date_of_stage) as max_date
from (select c.fileID, c.date, c.cash, s.stage, s.date_of_stage
from cash c
inner join stage s
on c.fileID=s.fileID
and s.date_of_stage < c.date
)
group by fileID, date, cash ) y
on x.fileID=y.fileID
and x.date=y.date
and x.cash=y.cash
where y.fileID is null
Но это левое соединение ничего не выдает, поэтому я не могу идентифицировать и исследовать отсутствующие записи.Любые советы, что делать?