根据完成日期设置尝试次数 - Postgres SQL,数据库

时间:2016-03-24 14:02:13

标签: sql postgresql postgresql-9.3

我有一个select语句返回到表格下面( User_Result)

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

现在我想根据注册日期和完成日期添加对这些用户的尝试次数。

我是怎么做的;

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;

但我得到了以下结果,

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

我应该如何根据这一点获得尝试次数:

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感谢您的回复。

谢谢 :)

1 个答案:

答案 0 :(得分:1)

我认为你可以在这里使用row_number功能。

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