分组、指定日期、求最大值,多个条件加一起就晕了啊表的内容如下,现在想知道在某个日期时候前,所有技能最高等
分组、指定日期、求最大值,多个条件加一起就晕了啊
表的内容如下,现在想知道在某个日期时候前,所有技能最高等级的统计汇总情况,比如在2009-06-01日时候的结果是A-1,C-2,D-1,在2010-12-31日的时候是A-1,B-2,C-1,D-1
----------------------------------------------------
ID姓名 等级日期 技能等级
1张三2005-11-11D
2张三2006-04-19C
3张三2009-11-25B
4李四2005-01-05D
5李四2007-12-09C
6李四2009-10-11B
7李四2011-03-13A
8王五2010-09-02D
9赵六2007-08-01D
10赵六2009-11-07C
11钱七2003-03-04D
12钱七2005-09-12C
13钱七2007-11-18B
14钱七2009-05-29A
[解决办法]
-- 日期要求连续不?
[解决办法]
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是怎么来的?
[解决办法]
[解决办法]
- 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> 