如何获得每天最多参与的ID |甲骨文

问题描述 投票:0回答:1

我有点困惑如何为某些场景编写查询

表:

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

oracle
1个回答
0
投票

您似乎想要

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
© www.soinside.com 2019 - 2024. All rights reserved.