Select mit Durchschnitts Datum Werten

Gab es vorher noch nicht, habe ich nachträglich hinzugefügt. - Ändert anscheinend gar nichts...
Die RAM Auslastung ist durch einen Eingriff in die INI Datei jetzt schon bei knapp 5GB, & es läuft & läuft....
 
Werbung:
Versuch das mal:
Code:
SELECT A.KundenID, DATEDIFF( B.`BezDat` , A.`BezDat` ) AS Date_Diff, Min( B.BezDat ) AS BezDat
FROM zero AS A
INNER JOIN zero AS B
ON A.KundenID = B.KundenID
AND A.BezDat < B.BezDat
GROUP BY A.KundenID, A.BezDat

Sollte theoretisch das gleiche Ergebnis liefern.

Edit: ON statt WHERE
 
Zuletzt bearbeitet:
KundenID, Tage seit letztem Einkauf, Einkaufsdatum

Der Code von vorher lässt sich da auch noch einpassen. Das hier sollte lediglich als Ersatz für den Code mit der teuren Subanfrage dienen.
 
Jetzt funktioniert der kombinierte Code wunderbar!

Code:
SELECT M.`KundenID` , `last` , DATE_ADD( `last` , INTERVAL `avg` DAY ) AS `next` ,
CASE WHEN DATE_ADD( `last` , INTERVAL `avg` DAY ) < CURRENT_DATE THEN 'true' ELSE 'false' END AS overdue
FROM (
    SELECT `KundenID` , MAX( `BezDat` ) AS `last`
    FROM `auftrag`
    GROUP BY `KundenID`
)M
INNER JOIN (
    SELECT `KundenID` , AVG( Date_Diff ) AS `avg`
    FROM (
SELECT A.KundenID, DATEDIFF( B.`BezDat` , A.`BezDat` ) AS Date_Diff, Min( B.BezDat ) AS BezDat
FROM auftrag AS A
INNER JOIN auftrag AS B
on A.KundenID = B.KundenID
AND A.BezDat < B.BezDat
  AND A.Auftrag='TypeB'
  AND A.BezDat IS NOT NULL
GROUP BY A.KundenID, A.BezDat)
     AS T
    GROUP BY `KundenID`
) AS AT
ON M.`KundenID` = AT.`KundenID`;

D A N K E !!!!
Geniale Lösung
 
Benutze ruhig den vereinfachten Code aus meinem anschließenden Post. Das spart einen Join. Außerdem könnte sich der äußere Select noch sparen lassen.

Ansonsten– keine Ursache. :)
 
Das Ergebnis sollte dann so aussehen:

Code:
SELECT `KundenID` ,
MAX( `BezDat` ) AS `last` ,
DATE_ADD( MAX( `BezDat` ) , INTERVAL AVG( Date_Diff ) DAY ) AS `next` ,

CASE WHEN 
DATE_ADD( MAX( `BezDat` ) , INTERVAL DATE_ADD( MAX( `BezDat` ) , INTERVAL AVG( Date_Diff ) DAY ) DAY ) < CURRENT_DATE
THEN 'true'
ELSE 'false'
END AS overdue
FROM (
    SELECT A.KundenID, DATEDIFF( B.`BezDat` , A.`BezDat` ) AS Date_Diff, Min( B.BezDat ) AS BezDat
    FROM zero AS A
    INNER JOIN zero AS B
    ON A.KundenID = B.KundenID
    AND A.BezDat < B.BezDat
    GROUP BY A.KundenID, A.BezDat
) AS T
GROUP BY `KundenID`
 
Werbung:
So stimmt es natürlich. :oops:
Code:
SELECT `KundenID` ,
MAX( `BezDat` ) AS `last` ,
DATE_ADD( MAX( `BezDat` ) , INTERVAL AVG( Date_Diff ) DAY ) AS `next` ,
CASE WHEN
    DATE_ADD( MAX( `BezDat` ) , INTERVAL AVG( Date_Diff ) DAY ) < CURRENT_DATE
THEN 'true'
ELSE 'false'
END AS overdue
FROM (
    SELECT A.KundenID, DATEDIFF( B.`BezDat` , A.`BezDat` ) AS Date_Diff, Min( B.BezDat ) AS BezDat
    FROM zero AS A
    INNER JOIN zero AS B
    ON A.KundenID = B.KundenID
    AND A.BezDat < B.BezDat
    GROUP BY A.KundenID, A.BezDat
) AS T
GROUP BY `KundenID`
 
Zurück
Oben