2016-03-24 4 views
0

Ich habe eine Select-Anweisung, die unter Tabelle (User_Result) zurückgeben.Set # Versuche nach Completed Date - Postgres SQL, Datenbank

userId UserName Course EnrolmentDate CompletedDate Status 
111  User_01 Course1 2016-03-16 2016-03-18  Fail 
111  User_01 Course1 2016-03-20 2016-03-24  pass 
112  User_02 Course2 2016-01-05 2016-01-05  Fail 
112  User_02 Course2 2016-01-05 2016-01-06  Fail 
112  User_02 Course2 2016-01-20 2016-01-25  Pass 

Jetzt möchte ich Anzahl der Versuche für diese Benutzer hinzufügen, je nach dort Anmeldedatum und abgeschlossenes Datum.

Wie ich tat ist;

With "report_result" AS 
(
SELECT 
"userID", 
"UserName", 
"Course", 
"EnrolmentDate", 
"Completed Date", 
"status" 
FROM "User_Result" 
) 
, 
"attempts_tbl" AS (
     SELECT 
      "userID", 
      "Course", 
      count(1) AS attempt 
     FROM report_result 
     GROUP BY "userID", "Course" 
) 
, 
"finaltable" AS 
(
Select 
report_result.*, 
attempts_tbl.attempt 
from 
report_result,attempts_tbl 
where report_result."userID" = attempts_tbl."userID" and report_result."Course" = attempts_tbl."Course" 
) 

SELECT * 
FROM final table; 

Aber ich habe unten Ergebnis

userId UserName Course EnrolmentDate CompletedDate Status #Attempts 
    111  User_01 Course1 2016-03-16 2016-03-18  Fail  2 
    111  User_01 Course1 2016-03-20 2016-03-24  pass  2 
    112  User_02 Course2 2016-01-05 2016-01-05  Fail  3 
    112  User_02 Course2 2016-01-05 2016-01-06  Fail  3 
    112  User_02 Course2 2016-01-20 2016-01-25  Pass  3 

Wie soll ich # Versuche erhalten nach dieser:

userId UserName Course EnrolmentDate CompletedDate Status #Attempts 
    111  User_01 Course1 2016-03-16 2016-03-18  Fail  1 
    111  User_01 Course1 2016-03-20 2016-03-24  pass  2 
    112  User_02 Course2 2016-01-05 2016-01-05  Fail  1 
    112  User_02 Course2 2016-01-05 2016-01-06  Fail  2 
    112  User_02 Course2 2016-01-20 2016-01-25  Pass  3 

Mush Ihre Antworten zu schätzen wissen.

Danke :)

+0

möchten Sie # Versuche eine rollende Summe zu sein? –

+0

Ich möchte einen Versuch von 1, 2, 3 für jeden Datensatz bekommen, wie ich auf meinem letzten Tisch gezeigt habe. :) –

Antwort

1

Ich glaube, Sie row_number Funktion hier nutzen können.

select u.*, 
row_number() over(partition by userid,course order by enrollmentdate,completeddate) as attempts 
from "User_Result" u 
+0

Ohh .. Ich habe es total vergessen .. mein Gehirn ist jetzt heruntergefahren. Danke @vkp. Viel zu schätzen wissen. Schönen Tag !! –