Rechnungspositionen und Rechnungen über einen gewissen Zeitraum ausgeben

SELECT DISTINCT
r.id AS Rechnungsnummer,
r.titel AS Rechnungstitel,
r.betrag AS Rechnungstotal,
r.referenz_nummer AS Referenznummer,
GROUP_CONCAT(DISTINCT p.email SEPARATOR '; ') AS Mailadresse,
k.bezeichnung AS Name,
repos1.beschrieb AS Rechnungsposition1Beschrieb,
repos1.betrag AS Rechnungsposition1Betrag,
CONCAT_WS('', ha1.abotyp_name, da1.abotyp_name, pa1.abotyp_name, za1.abotyp_name) AS Rechnungsposition1AbotypName,
repos2.beschrieb AS Rechnungsposition2Beschrieb,
repos2.betrag AS Rechnungsposition2Betrag,
CONCAT_WS('', ha2.abotyp_name, da2.abotyp_name, pa2.abotyp_name, za2.abotyp_name) AS Rechnungsposition2AbotypName,
repos3.beschrieb AS Rechnungsposition3Beschrieb,
repos3.betrag AS Rechnungsposition3Betrag,
CONCAT_WS('', ha3.abotyp_name, da3.abotyp_name, pa3.abotyp_name, za3.abotyp_name) AS Rechnungsposition3AbotypName,
repos4.beschrieb AS Rechnungsposition4Beschrieb,
repos4.betrag AS Rechnungsposition4Betrag,
CONCAT_WS('', ha4.abotyp_name, da4.abotyp_name, pa4.abotyp_name, za4.abotyp_name) AS Rechnungsposition4AbotypName,
repos5.beschrieb AS Rechnungsposition5Beschrieb,
repos5.betrag AS Rechnungsposition5Betrag,
CONCAT_WS('', ha5.abotyp_name, da5.abotyp_name, pa5.abotyp_name, za5.abotyp_name) AS Rechnungsposition5AbotypName,
repos6.beschrieb AS Rechnungsposition6Beschrieb,
repos6.betrag AS Rechnungsposition6Betrag,
CONCAT_WS('', ha6.abotyp_name, da6.abotyp_name, pa6.abotyp_name, za6.abotyp_name) AS Rechnungsposition6AbotypName
FROM
Rechnung r,
Kunde k,
Person p
left join RechnungsPosition repos1 on repos1.id = (select rp1.id from RechnungsPosition rp1 where rp1.rechnung_id = r.id order by rp1.id LIMIT 0,1)
left join HeimlieferungAbo ha1 on ha1.id = repos1.abo_id
left join DepotlieferungAbo da1 on da1.id = repos1.abo_id
left join PostlieferungAbo pa1 on da1.id = repos1.abo_id
left join ZusatzAbo za1 on za1.id = repos1.abo_id
left join RechnungsPosition repos2 on repos2.id = (select rp2.id from RechnungsPosition rp2 where rp2.rechnung_id = r.id order by rp2.id LIMIT 1,1)
left join HeimlieferungAbo ha2 on ha2.id = repos2.abo_id
left join DepotlieferungAbo da2 on da2.id = repos2.abo_id
left join PostlieferungAbo pa2 on da2.id = repos2.abo_id
left join ZusatzAbo za2 on za2.id = repos2.abo_id
left join RechnungsPosition repos3 on repos3.id = (select rp3.id from RechnungsPosition rp3 where rp3.rechnung_id = r.id order by rp3.id LIMIT 2,1)
left join HeimlieferungAbo ha3 on ha3.id = repos3.abo_id
left join DepotlieferungAbo da3 on da3.id = repos3.abo_id
left join PostlieferungAbo pa3 on da3.id = repos3.abo_id
left join ZusatzAbo za3 on za3.id = repos3.abo_id
left join RechnungsPosition repos4 on repos4.id = (select rp4.id from RechnungsPosition rp4 where rp4.rechnung_id = r.id order by rp4.id LIMIT 3,1)
left join HeimlieferungAbo ha4 on ha4.id = repos4.abo_id
left join DepotlieferungAbo da4 on da4.id = repos4.abo_id
left join PostlieferungAbo pa4 on da4.id = repos4.abo_id
left join ZusatzAbo za4 on za4.id = repos4.abo_id
left join RechnungsPosition repos5 on repos5.id = (select rp5.id from RechnungsPosition rp5 where rp5.rechnung_id = r.id order by rp5.id LIMIT 4,1)
left join HeimlieferungAbo ha5 on ha5.id = repos5.abo_id
left join DepotlieferungAbo da5 on da5.id = repos5.abo_id
left join PostlieferungAbo pa5 on da5.id = repos5.abo_id
left join ZusatzAbo za5 on za5.id = repos5.abo_id
left join RechnungsPosition repos6 on repos6.id = (select rp6.id from RechnungsPosition rp6 where rp6.rechnung_id = r.id order by rp6.id LIMIT 5,1)
left join HeimlieferungAbo ha6 on ha1.id = repos6.abo_id
left join DepotlieferungAbo da6 on da1.id = repos6.abo_id
left join PostlieferungAbo pa6 on da1.id = repos6.abo_id
left join ZusatzAbo za6 on za6.id = repos6.abo_id
WHERE
r.kunde_id = k.id AND
p.kunde_id = k.id AND
r.rechnungs_datum > '2000-01-01' AND
r.id > 0
GROUP BY
r.id, r.titel, r.betrag, r.referenz_nummer, k.bezeichnung,
repos1.beschrieb, repos1.betrag,
ha1.abotyp_name, da1.abotyp_name, pa1.abotyp_name, za1.abotyp_name,
repos2.beschrieb, repos2.betrag,
ha2.abotyp_name, da2.abotyp_name, pa2.abotyp_name, za2.abotyp_name,
repos3.beschrieb, repos3.betrag,
ha3.abotyp_name, da3.abotyp_name, pa3.abotyp_name, za3.abotyp_name,
repos4.beschrieb, repos4.betrag,
ha4.abotyp_name, da4.abotyp_name, pa4.abotyp_name, za4.abotyp_name,
repos5.beschrieb, repos5.betrag,
ha5.abotyp_name, da5.abotyp_name, pa5.abotyp_name, za5.abotyp_name,
repos6.beschrieb, repos6.betrag,
ha6.abotyp_name, da6.abotyp_name, pa6.abotyp_name, za6.abotyp_name
ORDER BY r.id;