Entwickler-Ecke
Datenbanken - Neue Datensätze identifizieren
Narses - Di 14.10.08 21:22
Titel: Neue Datensätze identifizieren
Moin!
Ich brauch mal (My)SQL-Nachhilfe, bitte. ;)
Ich habe eine Tabelle, die (vereinfacht) zwei Spalten hat:
SQL-Anweisung
1: 2:
| zeitpunkt: datetime id: char(20) |
Im Laufe der Zeit sammeln sich IDs und zugehörige Zeitpunkte an (könnte man als Login ansehen, zum besseren Verständnis), wobei die Usermenge zwar relativ groß, aber begrenzt ist.
Ich brauch nun die Anzahl eindeutiger (distinct) IDs über die ganze Tabelle. Das ist nicht schwer:
SQL-Anweisung
1:
| SELECT COUNT( DISTINCT id ) FROM tabelle |
Jetzt wird´s aber leider schwer :? ich brauche nun auch noch die Anzahl der eindeutigen IDs, die auf einen bestimmten Zeitraum bezogen "neu" sind. Beispiel:
Quelltext
1: 2: 3: 4: 5: 6: 7: 8: 9: 10:
| User A meldet sich am 01.09.2008 an User B meldet sich am 02.09.2008 an User A meldet sich am 03.10.2008 an User C meldet sich am 04.10.2008 an User A meldet sich am 05.10.2008 an
Anzahl(gesamt) = 3 (es gibt User A, B und C)
Anzahl(09.2008) = 2 (A+B) Anazhl(10.2008) = 1 (nur C, A ist "alt") |
Geht sowas mit einem SQL-Statement überhaupt? Wenn ja, wie? :?!?:
cu
Narses
Xentar - Di 14.10.08 21:28
SQL-Anweisung
1:
| SELECT COUNT( DISTINCT id ) FROM tabelle where DATUM > "09.10.2008" |
? Mit den " bin ich mir nicht ganz sicher, könnten auch ' sein
Narses - Di 14.10.08 21:32
Moin!
Das wird leider nicht funktionieren, denn diese Anfrage wird 0 ergeben. :?
Vielleicht nochmal anders gesagt: Interessant ist, wieviele "neue" Benutzer in einem Monat vorhanden sind. :idea:
cu
Narses
Xentar - Di 14.10.08 21:36
Ach, hab nicht gelesen, dass es hier um ganze Monate geht.
Neuer Versuch:
SQL-Anweisung
1:
| SELECT COUNT( DISTINCT id ) FROM tabelle WHERE DATUM > "01.10.2008" and DATUM <= "31.10.2008" |
?
Hab grad keine Datenbank hier zum ausprobieren :(
Narses - Di 14.10.08 21:41
Moin!
Xentar hat folgendes geschrieben : |
Neuer Versuch:
SQL-Anweisung 1:
| SELECT COUNT( DISTINCT id ) FROM tabelle WHERE DATUM > "01.10.2008" and DATUM <= "31.10.2008" | |
Das habe ich natürlich auch in den Abfragen drin, sieht so aus: :)
SQL-Anweisung
1:
| SELECT COUNT( DISTINCT id ) FROM tabelle WHERE year(datum)=2008 and month(datum)=10 |
Allerdings, das liefert logischerweise eine 2 (nämlich A+C), da A aber schon im Monat davor da war, darf er nicht mitgezählt werden! :idea:
Jetzt klar? :zwinker:
cu
Narses
littleDave - Di 14.10.08 21:45
Ich bin jetzt auch nicht so der SQL-Crack, jedoch würd ich ein paar Klammern im SQL setzen:
SQL-Anweisung
1:
| SELECT COUNT( DISTINCT id ) FROM tabelle WHERE (year(datum)=2008) and (month(datum)=10) |
Narses - Di 14.10.08 21:46
Moin!
littleDave hat folgendes geschrieben : |
Ich bin jetzt auch nicht so der SQL-Crack, jedoch würd ich ein paar Klammern im SQL setzen: |
Das würde ich auch tun (und hab´s auch getan), ändert aber nix am Ergebnis, da das Konzept dieser Abfrage "falsch" ist. :nixweiss:
cu
Narses
Xentar - Di 14.10.08 21:47
Narses hat folgendes geschrieben : |
Allerdings, das liefert logischerweise eine 2 (nämlich A+C), da A aber schon im Monat davor da war, darf er nicht mitgezählt werden! :idea:
Jetzt klar? :zwinker: |
Ahh, ok, jetzt hab ich's, sorry :D
SQL-Anweisung
1:
| SELECT COUNT( DISTINCT id ) FROM tabelle WHERE year(datum)=2008 and month(datum)=10 and (ID not in (SELECT DISTINCT id FROM tabelle WHERE Datum < "1.10.2008")) |
Sollte alle ausschließen, die im Zeitraum vorher schonmal da waren.
Edit: Not in? Oder war es <>any ? Eins von beiden sollte passen.
Yogu - Di 14.10.08 21:52
littleDave hat folgendes geschrieben : |
Ich bin jetzt auch nicht so der SQL-Crack, jedoch würd ich ein paar Klammern im SQL setzen: |
Das kann gar nicht der Fehler sein, da MySQL noch gar nicht weiß, was
Narses will. Da muss noch irgendwie rein, dass der User nicht vorher vorgekommen ist. :idea:
(
Edit: Oh, 2 Posts zu spät :oops:)
Ich hab noch nie mit
DISTINCT gearbeitet, aber kannst du das nicht irgendwie mit der Datumsabfrage verknüpfen?
SQL-Anweisung
1:
| SELECT FROM tabelle WHERE year(datum)=2008 and month(datum)=10 and COUNT( DISTINCT id ) |
Das wird so sicherlich nicht funktionieren, aber ich will damit versuchen klar zu machen, was ich meine.
PS: Juhu, ich bin hatte Recht!
Xentar hat die Query nur noch mal "überarbeitet". :mrgreen:
littleDave - Di 14.10.08 21:56
Jetzt versteh ich das Problem erst :oops:. Hab oben nicht gesehen, dass es ja nur 3 Benutzer gibt. Bin davon ausgegangen, dass es 5 Benutzer gibt und das Datum die Registrierung sein soll. Doch jetzt ist mir alles klar.
Narses - Di 14.10.08 22:18
Moin!
Xentar hat folgendes geschrieben : |
Sollte alle ausschließen, die im Zeitraum vorher schonmal da waren. |
Jup, das tut´s. :) Danke. :zustimm:
(Wat´n blödes Brett vor´m Kopp, auf so ein einfaches Subquery nicht zu kommen :roll: woran merkt man, dass ich keine Ahnung von DBs habe... :lol:)
cu
Narses
Entwickler-Ecke.de based on phpBB
Copyright 2002 - 2011 by Tino Teuber, Copyright 2011 - 2025 by Christian Stelzmann Alle Rechte vorbehalten.
Alle Beiträge stammen von dritten Personen und dürfen geltendes Recht nicht verletzen.
Entwickler-Ecke und die zugehörigen Webseiten distanzieren sich ausdrücklich von Fremdinhalten jeglicher Art!