2016-03-24 14 views
0

Tablodan (User_Result) geri dönen bir select deyim var.Tamamlanma Tarihine göre yapılan denemelerin sayısını ayarlayın - Postgres SQL, Veritabanı

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 

Şimdi, o kullanıcılara, kayıt tarihine ve tamamlanma tarihine göre, bu denemelere giriş sayısını eklemek istiyorum.

Nasıl yaptım;

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; 

Ama sonucu altında var

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 

nasıl buna göre girişimlerinin # almalısınız:

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 

Lapa cevaplarınızı teşekkür ederiz.

Eğer :)

+0

#attempts yuvarlama toplamı olmak ister misiniz? –

+0

Son tablomda gösterdiğim gibi her kayıt için 1, 2, 3 girişimi almak istiyorum. :) –

cevap

1

Burada row_number işlevini kullanabilirsiniz düşünüyorum ederiz.

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

Ohh .. Tamamen unuttum .. beynim şimdi kapanıyor. Teşekkürler @vkp. Çok takdir ediyorum. İyi günler !! –