dada-lein
Goto Top

MS-SQL: Zählen von Einträgen mit Aussortierung von doppelten Einträgen

Hallo. Gerade hat mir ein Kollege das Forum hier empfohlen, da er mir bei meinem Problem auch nicht recht helfen konnte. Vermutlich gibt es das Problem schon als Lösung, aber ich habe es leider nicht gefunden. face-sad

Also ich habe eine DB-Tabelle u.a. mit den Feldern ID und DATE.

Die ID wird täglich neu vergeben, so daß die ID 1 von gestern nicht die gleiche ist wie die ID 1 von heute.

Nun soll ich mit ner SQL-Abfrage die "distinct" IDs des letzten Monats zählen. Jedoch muss ich ja an sich nur die Distinct-IDs je Tag haben.

Bisher habe ich das hier:

SELECT COUNT(DISTINCT id) AS GesamtLetzterMonat
FROM tabelle
WHERE (MONTH(GETDATE()) = MONTH([date]) + 1)

Das wirft mir auch "ganz toll" die Anzahl aller "distinct" IDs raus. Nur hilft mir das ja nichts wenn eine ID an einem anderen Tag auch nochmal vorkommt und nicht mitgezählt wird.

Hat da jemand einen Plan? Jemand hat mir gesagt ich soll es mit folgendem versuchen:

SELECT COUNT(DISTINCT id, [date]) AS GesamtLetzterMonat
FROM tabelle
WHERE (MONTH(GETDATE()) = MONTH([date]) + 1)

Leider funktioniert das nicht. Zumindest bekomme ich immer nen Fehler vom MS-SQL Server.

Hilfe! *seufz*

Vielen Dank im Voraus.

Björn

Content-Key: 17164

Url: https://administrator.de/contentid/17164

Printed on: April 19, 2024 at 04:04 o'clock

Member: Biber
Biber Oct 04, 2005 at 16:16:18 (UTC)
Goto Top
Moin, Björn,
wenn es auch ein Holzhammer statt etwas spielerisch Leichtem, Eleganten sein darf:
SELECT  COUNT(DISTINCT( CONCAT(CHAR(id) , CHAR([date])))) As GesamtLetzterMonat
FROM tabelle 
WHERE (MONTH(GETDATE()) = MONTH([date]) + 1) 

Grüße
Biber
Mitglied: 16640
16640 Oct 05, 2005 at 05:48:47 (UTC)
Goto Top
Moin

SELECT day([date]), COUNT(DISTINCT id) AS GesamtLetzterMonat 
FROM tabelle 
WHERE (MONTH(GETDATE()) = MONTH([date]) + 1) 
group by day([date])

Den Alias würde ich dann noch 'GesamtProTag' oder so nennen face-wink

Deine zweite Abfrage müsstest Du dann so umbauen:
SELECT [date], COUNT(DISTINCT id)  AS GesamtLetzterMonat 
FROM tabelle 
WHERE (MONTH(GETDATE()) = MONTH([date]) + 1) 
group by [date]

womit wir dann praktisch bei meinem obigen Vorschlag sind.

hand/dba
Mitglied: 16640
16640 Oct 05, 2005 at 05:50:40 (UTC)
Goto Top
Moin Biber,

hast Du das ausprobiert? Mein SQL-Server meckert CONCAT an face-wink
Ich verwende zum Verketten eigentlich immer das '+'

hand/dba
Mitglied: 16640
16640 Oct 05, 2005 at 05:59:12 (UTC)
Goto Top
Hab's mal gerade umgebaut:
SELECT COUNT(DISTINCT( convert(CHAR, id)+convert(CHAR, [date]))) As GesamtLetzterMonat 
FROM tabelle 
WHERE (MONTH(GETDATE()) = MONTH([date]) + 1) 

Kann sein, dass Björn auch genau diese Lösung sucht face-wink
(ist noch zu früh für mich)

hand/dba
Member: Biber
Biber Oct 05, 2005 at 08:02:55 (UTC)
Goto Top
@16640

Hast recht, hab ich nicht an einem MS-SQL-Server ausprobiert *schäm
Aber es gibt SQL-Server, an denen das funktioniert.

Egal, ihr habt ja erkannt, was ich meinte *gg

HAND,2
Biber
Member: dada-lein
dada-lein Oct 05, 2005 at 09:21:36 (UTC)
Goto Top
Cool. Danke Leute. Das scheint genau das zu sein, was ich gesucht habe. *jubel*

Danke danke danke face-smile))

bisdenndann
Björn

PS: Nun ist mir klar warum mein Kollege von diesem Forum so begeistert ist face-smile