2017-03-01 3 views
-2

Ich habe die folgende Abfrage:Wie kann ich doppelte Werte in einer anderen Spalte ignorieren, wenn ich GROUP verwende?

SELECT 
    DATE(`timeStamp`),COUNT(*) 
FROM 
    `wf`.sh` 
WHERE 
    (DATE(`timeStamp`) >= curdate()- INTERVAL 31 DAY) 
GROUP BY 
    DATE(`timeStamp`) 
HAVING 
    COUNT(DATE(`timeStamp`)) > 0 
ORDER BY 
    DATE(`timeStamp`) ASC; 

Der Zweck dieser Abfrage ist die Menge des Benutzers online in meinem System pro Tag, innerhalb von einem Monat abgerufen werden.

Beispiel-Datensatz:

uID  timeStamp 
1  2016-11-28 00:27:01 
1  2016-11-28 01:10:15 
1234 2016-11-28 02:50:00 
2  2016-11-28 06:11:09 
47  2016-11-28 08:32:48 
1246 2016-11-28 09:51:47 

In seinem aktuellen Format, diese Abfrage gibt die Anzahl der Zeilen mit doppelten Terminen, zum Beispiel:

timeStamp COUNT(*) 
2017-01-29 256 
2017-01-30 224 
2017-01-31 240 
2017-02-01 95 
2017-02-02 136 

ich uID ein anderes Feld haben; Ich muss meine Abfrage so ändern, dass GROUP auch Zeilen mit einem doppelten uID Feld für jeden Tag ignoriert. Ich habe versucht, ein anderes zu erstellen, aber es wurde ein Fehler ausgegeben, der "falsche GROUP BY-Klausel" (oder etwas in der Art).

Kann dies über reines MySQL geschehen?

+0

Wäre schön, verwenden Sie den Grund für die * zwei * Drive-by-downvotes auf meine Frage zu kennen, die in den letzten paar Stunden aufgetreten sind .. – cybermonkey

Antwort

1

können Sie einen subselect

SELECT 
    visitDate,COUNT(*) 
FROM 
    (SELECT DISTINCT DATE(`timeStamp`) as visitDate, uID FROM `wf`.sh`) alias_t 
WHERE 
    (visitDate >= curdate()- INTERVAL 31 DAY) 
GROUP BY 
    visitDate 
HAVING 
    COUNT(visitDate) > 0 
ORDER BY 
    visitDate ASC; 
Verwandte Themen