当前位置: 代码迷 >> Oracle面试 >> 分组、指定日期、求最大值,多个条件加一起就晕了啊该怎么解决
  详细解决方案

分组、指定日期、求最大值,多个条件加一起就晕了啊该怎么解决

热度:7309   发布时间:2013-02-26 00:00:00.0
分组、指定日期、求最大值,多个条件加一起就晕了啊
表的内容如下,现在想知道在某个日期时候前,所有技能最高等级的统计汇总情况,比如在2009-06-01日时候的结果是A-1,C-2,D-1,在2010-12-31日的时候是A-1,B-2,C-1,D-1
----------------------------------------------------
ID 姓名 等级日期 技能等级
1 张三 2005-11-11 D
2 张三 2006-04-19 C
3 张三 2009-11-25 B
4 李四 2005-01-05 D
5 李四 2007-12-09 C
6 李四 2009-10-11 B
7 李四 2011-03-13 A
8 王五 2010-09-02 D
9 赵六 2007-08-01 D
10 赵六 2009-11-07 C
11 钱七 2003-03-04 D
12 钱七 2005-09-12 C
13 钱七 2007-11-18 B
14 钱七 2009-05-29 A

------解决方案--------------------------------------------------------
-- 日期要求连续不?
------解决方案--------------------------------------------------------
select a.等级日期,b.技能等级,count(b.姓名) as cnt
(select 等级日期 from 表A group by 等级日期) a, 表A b
where b.等级日期<a.等级日期
group by a.等级日期,b.技能等级
------解决方案--------------------------------------------------------
数据是A,B,C,D没懂后面的 A-1,B-2是怎么来的?
------解决方案--------------------------------------------------------
探讨

意思就是统计的结果是A的1个,B的2个,

------解决方案--------------------------------------------------------
SQL code
SQL> select * from t1;        ID NAME LEVEL_DATE          SKILL_LEVEL---------- ---- ------------------- -----------         1 张三 2005-11-11 00:00:00 D         2 张三 2006-04-19 00:00:00 C         3 张三 2009-11-25 00:00:00 B         4 李四 2005-01-05 00:00:00 D         5 李四 2007-12-09 00:00:00 C         6 李四 2009-10-11 00:00:00 B         7 李四 2011-03-13 00:00:00 A         8 王五 2010-09-02 00:00:00 D         9 赵六 2007-08-01 00:00:00 D        10 赵六 2009-11-07 00:00:00 C        11 钱七 2003-03-04 00:00:00 D        12 钱七 2005-09-12 00:00:00 C        13 钱七 2007-11-18 00:00:00 B        14 钱七 2009-05-29 00:00:00 A已选择14行。SQL> WITH t AS  2   (SELECT *  3      FROM t1  4     WHERE t1.level_date < to_date('2010-12-31', 'yyyy-mm-dd hh24:mi:ss'))  5  SELECT skill_level || '-' || COUNT(*) SKILL_LEVEL  6    FROM t  7   WHERE NOT EXISTS (SELECT 1  8            FROM t b  9           WHERE b.name = t.name 10             AND b.skill_level < t.skill_level) 11   GROUP BY skill_level;SKILL_LEVEL-----------D-1B-2C-1A-1SQL>
  相关解决方案