分组、指定日期、求最大值,多个条件加一起就晕了啊该怎么解决
分组、指定日期、求最大值,多个条件加一起就晕了啊
表的内容如下,现在想知道在某个日期时候前,所有技能最高等级的统计汇总情况,比如在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是怎么来的?
------解决方案--------------------
------解决方案--------------------
表的内容如下,现在想知道在某个日期时候前,所有技能最高等级的统计汇总情况,比如在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是怎么来的?
------解决方案--------------------
------解决方案--------------------
- 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-1 B-2 C-1 A-1 SQL>