Frage

Ich stellte etwas ähnliches wie gestern, aber jetzt möchte ich etwas anderes von meinem Abfrage-

Ich versuche, die Abfrage einer Datenbank abrufen, die Anzahl der einmaligen Benutzer eine website besucht haben, über die Zeit.Die Daten sieht wie folgt aus:

Day | UserID  
  1 | A  
  1 | B  
  2 | B  
  3 | A  
  4 | B  
  4 | C  
  5 | D  

Ich möchte das Ergebnis der Abfrage zu sehen, das diese

Time Span      | COUNT(DISTINCT UserID)  
Day 1 to Day 1 | 2  
Day 1 to Day 2 | 1  
Day 1 to Day 3 | 0  
Day 1 to Day 4 | 1  
Day 1 to Day 5 | 2  

Das Ergebnis ist 2,1,0,1,2, denn am Ende dieser Tage, es gibt X die Anzahl der Benutzer, die besucht haben, ein einziges mal.z.B.für Tag 5 am Ende von Tag 5, Benutzer c und d nur einmal besucht jeden.

Ich glaube, ich bin auf der Suche für eine Abfrage wie diese:

select d.day, (select count(distinct userid) from visits where day<=d.day)
from (select distinct day from visits) d

Der Unterschied zwischen der obigen Abfrage und das, was ich Suche ist, dass ich möchte diese neue Abfrage zu prüfen, nur einmalige Benutzer für jede Zeitspanne, und nicht zu wiederholen Benutzer.

Vielen Dank

War es hilfreich?

Lösung

Diese Unterabfrage sollte Arbeit für die Klärung der Anforderungen.

select d.day, count(distinct case when b.userid is null then a.userid end)
from (select day from visits group by day) d
inner join
(
select a.day, a.userid, count(*) c
from visits a
join visits b on a.userid=b.userid and b.day <= a.day
group by a.day, a.userid
having count(*) = 1
) a on a.day <= d.day
left join
(
select a.day, a.userid, count(*) c
from visits a
join visits b on a.userid=b.userid and b.day <= a.day
group by a.day, a.userid
having count(*) > 1
) b on a.userid = b.userid and b.day <= d.day
group by d.day

Original

Sie hatten die Idee von SQL Server - es ist die einzige RDBMS (IIRC), dass Sie die Referenz ein, zweimal entfernt (nesting -) Abfrage.Bitte angeben, was Sie möchten, und wir können die Abfrage schreiben.

Für die genaue Abfrage angezeigt, die Sie nicht brauchen, 2 Ebenen der Unterabfrage

SELECT  
    C.col_c1 AS Data,
    (
        SELECT count(col_b1)
        FROM tbl
        WHERE col_b2 <= C.col_c1
    ) A
FROM (
    SELECT col_c1 # subquery to get distinct c1
    FROM tbl
    GROUP BY col_c1) C;
Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top