ich muss herausbekommen, wieviele Kunden einer bestimmten Benutzergruppe in einem bestimmten Zeitraum das erste mal bestellt haben. Es gilt das Datum der Versendung.
Leider stimmt das Ergebnis nicht mit den Bestellungen überein:
SELECT DISTINCT oxuser.oxid, oxsenddate
FROM oxuser, oxorder, oxobject2group
WHERE oxuser.oxid = oxuserid
AND oxstorno = 0
AND oxuser.oxid = oxobject2group.oxobjectid
AND oxgroupsid = '6a2e01b025db702f1caff71659f88fa5'
GROUP BY oxsenddate
HAVING MIN(oxsenddate) >= '2016-08-1 00:00:00' AND MIN(oxsenddate) <= '2016-08-31 23:59:59'
Wegen des MIN muss gruppiert werden, soweit ich weiß.
User werden teilweise doppelt ausgegeben - mit verschiedenen Zeiten.
Das SQL-Ergebnis bringt zu viele Kunden.
Woran kann das liegen?
Nachtrag: Es werden auch Kunden ausgegeben, die vor dem angegebenen Zeitraum bestellt haben.
SELECT *
FROM oxuser as a
JOIN
(
SELECT min(oxorderdate) as oxorderdate, oxuserid as oxuserid
FROM oxorder as b WHERE oxorderdate >= '2000-01-01 00:00:00' AND oxorderdate <= '2014-10-22 14:04:19'
group by oxuserid
) b ON a.oxid = b.oxuserid and b.oxuserid IN(select oxobjectid from oxobject2group where oxgroupsid = 'xxx')
Probiere es mal so (ungetestet). Daten und ID der Gruppe wären anzupassen.
leider werden da auch noch zu viele Datensätze ausgegeben.
So funktioniert es, auch wenn es nicht so elegant ist:
SELECT DISTINCT oxuser.oxid
FROM oxuser, oxorder, oxobject2group
WHERE oxuser.oxid = oxobject2group.oxobjectid
AND oxgroupsid = 'XXX'
AND oxuser.oxid = oxuserid
AND oxstorno = 0
AND oxsenddate <= '2016-08-31 23:59:59'
AND oxuser.oxid NOT IN
(SELECT oxuserid
FROM oxorder
WHERE oxstorno = 0
AND oxsenddate < '2016-08-1 00:00:00')