根据完成日期设置尝试次数 - Postgres SQL,数据库
Set # of attempts according to Completed Date - Postgres SQL, Database
我有一个 select 声明 return 在 table (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
非常感谢您的回复。
谢谢
:)
我想你可以在这里使用 row_number
功能。
select u.*,
row_number() over(partition by userid,course order by enrollmentdate,completeddate) as attempts
from "User_Result" u
我有一个 select 声明 return 在 table (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
非常感谢您的回复。
谢谢 :)
我想你可以在这里使用 row_number
功能。
select u.*,
row_number() over(partition by userid,course order by enrollmentdate,completeddate) as attempts
from "User_Result" u