我有点困惑如何为某些场景编写查询
表:
employee
create table employee
(
name varchar2(10),
sdate date,
subid number
);
insert into dummy values ('Arun',to_date('2016-03-01','YYYY-MM-DD'),123);
insert into dummy values ('Arun',to_date('2016-03-01','YYYY-MM-DD'),453);
insert into dummy values ('Raj',to_date('2016-03-01','YYYY-MM-DD'),12);
insert into dummy values ('Raj',to_date('2016-03-01','YYYY-MM-DD'),45);
insert into dummy values ('Raj',to_date('2016-03-01','YYYY-MM-DD'),16);
insert into dummy values ('Raj',to_date('2016-03-01','YYYY-MM-DD'),18);
insert into dummy values ('Darshan',to_date('2016-03-01','YYYY-MM-DD'),1600);
insert into dummy values ('Darshan',to_date('2016-03-01','YYYY-MM-DD'),1820);
下面是我表格中的数据
name,date,subid
Arun,2016-03-01,123
Arun,2016-03-01,453
Raj,2016-03-01,12
Raj,2016-03-01,45
Raj,2016-03-01,16
Raj,2016-03-01,18
Darshan,2016-03-01,1600
Darshan,2016-03-01,1820
现在我需要以这样的方式进行过滤,让
maximum time
subid
参与 name
each day
Arun -> count -> 2 -> 2016-03-01
Raj -> count -> 4 -> 2016-03-01
Darshan -> count -> 2 -> 2016-03-01
输出:
name , subid , date
Raj , 12 , 2016-03-01
假设如果出现类似
Raj
和 Darshan
作为 same count
那么 order name wise
和 pick lesser subid
的名称
name,date,subid
Arun,2016-03-01,123
Arun,2016-03-01,453
Raj,2016-03-01,12
Raj,2016-03-01,45
Raj,2016-03-01,16
Raj,2016-03-01,18
Darshan,2016-03-01,1600
Darshan,2016-03-01,1820
Darshan,2016-03-01,160
Darshan,2016-03-01,18
Arun -> count -> 2 -> 2016-03-01
Raj -> count -> 4 -> 2016-03-01
Darshan -> count -> 4 -> 2016-03-01
字母顺序
Arun -> count -> 2 -> 2016-03-01
Darshan -> count -> 4 -> 2016-03-01
Raj -> count -> 4 -> 2016-03-01
选择较小的补贴
Darshan
输出:
name , subid , date
Darshan , 18 , 2016-03-01
我无法确定如何实现它。
我想到做
partition
by
,在什么基础上需要partition
?
您似乎想要
GROUP BY
name
和日 TRUNC(dt)
,然后找到每个组的 MIN
imum subid
,然后,对于计数最多的组(如果存在平局,则名字按字母顺序排列),FETCH
FIRST ROW
:
SELECT name,
TRUNC(dt) AS dt,
MIN(subid) AS subid
FROM table_name
GROUP BY name, TRUNC(dt)
ORDER BY COUNT(*) DESC, name
FETCH FIRST ROW ONLY