Benutzer, die zurückgegeben wurden

Ich habe einen Tisch mit [EVENT_DATE] und [USER_ID], ich würde gerne wissen, wie man die User zählt, die im selben Monat zurückkamen.

Table_01 ------------------------------------------- EVENT_DATE | USER_ID ------------------------------------------- 2017-03-28 00:00:25.000 | 0006235012201 2017-03-04 23:00:00.000 | 0006235012201 2017-03-19 00:25:15.000 | 0006235012201 2017-02-03 10:00:02.000 | 0006235012202 2017-01-18 00:15:00.000 | 0006235012202 2017-03-28 11:00:15.000 | 0006235012202 2017-03-23 15:20:02.000 | 0006235012203 2017-02-18 12:00:06.000 | 0006235012203 2017-03-21 16:05:09.000 | 0006235012203 

Die Antwort ist 2, weil die Benutzer im selben Monat zurückkamen.

EDIT: Entschuldigung

Ich schaue, um die Zählung nach Monat zu bekommen.

 ----------------------- Month | Users Returned ----------------------- 01/17 | 70 02/17 | 60 03/17 | 10 

Dies ist, was ich habe, aber es ist nicht richtig, wie es scheint, Benutzer aufzulisten.

 SELECT A.[USER_ID], A.[EVENT_DATE], COUNT(*) FROM( SELECT [USER_ID], [EVENT_DATE], COUNT(*) FROM Table_01 GROUP BY [USER_ID], [EVENT_DATE] HAVING COUNT(*) > 1 ) A GROUP BY A.[USER_ID], A.[EVENT_DATE] 

Microsoft SQL server 2016. Kompatibilitätsstufe: SQL server 2005 (90)

 select user_id from your_table group by user_id having count(distinct year(event_date) * 100 + month(event_date)) > 1 

Probieren Sie das untenstehende Skript aus

 SELECT DISTINCT USER_ID FROM Table_01 GROUP BY USER_ID, (YEAR(EVENT_DATE)*100)+MONTH(EVENT_DATE) HAVING COUNT(*) > 1 

Verwenden Sie unten Abfrage, um Benutzer im selben Monat zurückzugeben

 SELECT USER_ID FROM #Table GROUP BY USER_ID,(YEAR(EVENT_DATE)*100)+MONTH(EVENT_DATE) HAVING COUNT(*) > 1 

Mit diesem können Sie monatlich klug Ergebnis

  select month(EVENT_DATE),year(EVENT_DATE), USER_ID from tableName where year(EVENT_DATE)=2017 Group by USER_ID,year(EVENT_DATE),month(EVENT_DATE) Having HAVING COUNT(*) > 1 

Wenn Sie einen bestimmten Monat wise wollen, können Sie hinzufügen, wo Bedingung wie Monat (EVENT_DATE) = 3

Sie benötigen zwei Aggregationsstufen. Zuerst die Benutzer, die mehr als eine Zeile in einem Monat haben. Dann gruppieren Sie nach Jahr, Monat, um die Anzahl der Benutzer für einen bestimmten Monat zu erhalten.

 select cast(mth as varchar(2))+'/'+cast(yr as varchar(4)) as mth,count(*) from (select user_id,month(event_date) as mth,year(event_date) as yr from tablename group by user_id,month(event_date),year(event_date) having count(*) > 1 ) t group by cast(mth as varchar(2))+'/'+cast(yr as varchar(4))