oracle中group by按月分组统计

2024-12-15 21:54:44
推荐回答(2个)
回答1:

创建测试表

create table test
(姓名 varchar2(10),
访问时间 date,
进入时间 date,
离开时间 date);

    
insert into test values ('张三',to_date('2013-02-03 15:23:22','yyyy-mm-dd hh24:mi:ss'),to_date('2013-02-03 15:23:22','yyyy-mm-dd hh24:mi:ss'),to_date('2013-02-03 15:33:22'氏瞎,'yyyy-mm-dd hh24:mi:ss'));
insert into test values ('李四',to_date('2013-02-04 15:23:22','yyyy-mm-dd hh24:mi:ss'),to_date('2013-02-04 18:23:22','yyyy-mm-dd hh24:mi:ss'),to_date('2013-02-04 18:53:22','yyyy-mm-dd hh24:mi:ss'));
insert into test values ('王武',to_date('2013-02-04 15:23:22','yyyy-mm-dd hh24:mi:ss'),to_date('2013-02-05 17:23:22','yyyy-mm-dd hh24:mi:ss'),to_date('2013-02-05 18:23:22','yyyy-mm-dd hh24:mi:ss'));
insert into test values ('张三',to_date('2013-02-04 15:23:22','yyyy-mm-dd hh24:mi:ss'),to_date('2013-02-06 11:23:22','yyyy-mm-dd hh24:mi:ss'),to_date('2013-02-06 14:23:22','yyyy-mm-dd hh24:mi:ss'));

运行

select 姓名,
to_char(访问时间,'yyyy-mm') 访问月激冲份,
to_char(trunc(round(sum(离开时间-进入时间)*1440)/60))||'小时'||to_char(round(sum((离开时间-进入时间)*1440))-trunc(round(sum(离开时间-进入时间)*1440)/60)*60)||'分钟' 时间汇总,
count(*) 访问次明核歼数 from test 
group by 姓名,to_char(访问时间,'yyyy-mm');

结果

回答2:

select a.name "姓名",
       to_char(a.access_time, 'YYYY-MM') "月份",
      粗乱启 COUNT(a.name) "访问次数",
       sum((a.out_time - a.in_time) * 陪消60 * 24) "总时间(分钟)"
  from test a
 GROUP BY A.NAME, to_char(a.access_time, 'YYYY-MM'岩如)