【发布时间】:2020-07-29 13:08:11
【问题描述】:
表:
Student_Id Roll_No Date _Rank
1 101 10101 201905 3
2 101 10101 201910 6
3 101 10101 201912 9
4 101 10102 201905 15
5 101 10102 201910 9
6 101 10102 201912 3
7 103 10103 201905 3
8 103 10103 201910 9
9 103 10103 201912 9
10 103 10104 201905 3
11 103 10104 201910 9
12 103 10104 201912 9
我需要根据条件创建一个结果列。
检查特定的 Student_Id,Roll_No 如果 rank 是 9 并且 rank> 9 没有 根据日期出现在 9 之前,然后出现 1,否则为 0。
如果某个 Student_Id,Roll_No 有多个 9,则仅标记第一次出现。
结果:
Student_Id Roll_No Date _Rank Result
1 101 10101 201905 3 0
2 101 10101 201910 6 0
3 101 10101 201912 9 1
4 101 10102 201905 15 0 ---
5 101 10102 201910 9 0 --- 15 > 9, came before 9 for that Roll_No
6 101 10102 201912 3 0
7 103 10105 201905 9 1
8 103 10103 201910 9 1
9 103 10103 201912 9 0
10 103 10104 201905 3 0
11 103 10104 201910 9 1 --- first occurrence should 1
12 103 10104 201912 9 0
查询:
SELECT Student_Id, Roll_Number, Date, _Rank,
ROW_NUMBER() OVER( PARTITION BY Roll_Number ORDER BY Date) as rw_number
FROM table t
-- this is giving the row_number which is appeared first.
【问题讨论】:
标签: sql oracle date select window-functions