Исходя из того, что AdInsert является отношением 1: 1 к публикациям, а 1: 1 - к бронированию и, в конечном итоге, к компании, нам не нужно выполнять обратную ссылку на AdInserts с тем же идентификатором в поисках счета, который мы ». Я просто буду игнорировать.
ЭТИ должны быть квалифицированными рекламными вставками, которые вы ищете и, в конечном счете, хотите получить дополнительную информацию о бронировании / компании. Используя предварительный запрос для получения всех предварительных рекламных вставок и последнего штампованного счета-фактуры для компании, он МОЖЕТ быть присоединен к счетам с помощью этого идентификатора счета и отметки времени.
Я не получил "Сколько дней назад" у вас было, но, надеюсь, у вас есть вся необходимая информация, и вы сможете пересчитать ее, как только вы подтвердите, что этот запрос выполняет свою работу (или большую ее часть). Так как у меня была прямая ссылка на один счет-фактуру, вместо того, чтобы объединять поля в одно поле, я просто оставил их как отдельные элементы ... опять же, вы можете настроить при необходимости.
SELECT STRAIGHT_JOIN
PreQuery.Company_ID,
PreQuery.Company_Name,
PreQuery.Run,
PreQuery.Bill_Freq,
PreQuery.Currency,
PreQuery.Rate,
PreQuery.Publication_ID,
PreQuery.Booking_ID,
PreQuery.Art_Stamp,
PreQuery.Title,
Invoices.prefix,
Invoices.invoice_id,
Invoices.suffix,
Invoices.invoice_stamp,
Invoices.reference
from
( SELECT
ab.company_id,
c.Company_Name
ab.run,
ab.bill_freq,
ab.currency,
ai.publication_id,
ai.booking_id,
format( ai.rate, 2 ) Rate,
p.title,
p.art_stamp,
( select MAX( invoices.invoice_stamp )
from Invoices
where Invoices.Company_ID = c.Company_ID ) As LastInvoiceStamp;
from
adinserts ai
JOIN publications p
ON ai.publication_id = p.publication_id
and p.publication_stamp >= UNIX_TIMESTAMP('2010-01-01 00:00:00'
JOIN adBookings ab
ON ai.Booking_ID = ab.Booking_ID
JOIN Company c
ON ab.Company_id = c.Company_ID
where
ai.Invoice_ID is null
and ai.Cancel_Stamp is null
and ai.rate > 0 ) PreQuery
LEFT JOIN Invoices
ON PreQuery.Company_ID = Invoices.Company_ID
AND PreQuery.LastInvoiceStamp = Invoices.Invoice_Stamp
Возможно, вам придется применить COALESCE () к полям счетов в случае, если отсутствует нулевой предварительный счет для компании, но я думаю, что это очень ЗАКРЫТО с тем, что вы ищете.