这个sql语句该怎么写?!!!
有这样一个表TABLE
就是要取出ABCDE这5列
A B C D 组合起来肯定是惟一的
但是 ABC相同情况下 只需要取出最大D的这一行数据就好(筛选条件应该跟E无关)
例如:
对于 ABCED
(注意E是排在D前面的)
----------------------
| A | B | C | E | D | | |
----------------------
| 11 | 22 | 33 | A | 0 | | |
----------------------
| 11 | 22 | 33 | B | 2 | | |
----------------------
| 11 | 22 | 33 | C | 1 | | |
----------------------
只需要取出
| 11 | 22 | 33 | B | 2 | | |
就好。。。
再例如
对于下面这个
----------------------
| A | B | C | E | D | | |
----------------------
| 11 | 22 | 33 | A | 0 | | |
----------------------
| 11 | 22 | 33 | B | 2 | | |
----------------------
| 11 | 22 | 33 | C | 1 | | |
----------------------
| 22 | 22 | 33 | D | 0 | | |
----------------------
| 22 | 22 | 33 | B | 1 | | |
----------------------
| 33 | 22 | 33 | C | 2 | | |
----------------------
| 33 | 22 | 33 | A | 3 | | |
----------------------
| 44 | 22 | 33 | K | 0 | | |
----------------------
| 44 | 22 | 33 | A | 1 | | |
----------------------
| 55 | 22 | 33 | Z | 1 | | |
----------------------
需要取出
| 11 | 22 | 33 | B | 2 | | |
----------------------
| 22 | 22 | 33 | B | 1 | | |
----------------------
| 33 | 22 | 33 | A | 3 | | |
----------------------
| 44 | 22 | 33 | A | 1 | | |
----------------------
| 55 | 22 | 33 | Z | 1 | | |
----------------------
现在有用这个max(rowid)方法
但是max(rowid)好像是跟列的排序有关的
如果在table定义的时候,D列排在E列前面的话
就能正确地取出结果
但是E列排在D列前面的话
max(rowid)是会根据E的大小来选择哪一行数据
select * from Table where rowid in (select max(rowid) from Table group by A || B || C);
请帮忙写下这个SQL语句
(不管table定义的时候列的顺序)
运行ok的话马上结贴给分!
多谢!!! sql
[解决办法]
select w.A, w.B, w.C, w.E, w.D
from test2 w, (select A, B, C, max(D) as F from test2 group by A, B, C) t
where w.A = t.A
and w.B = t.B
and w.C = t.C
and D = t.F
order by w.A, w.B, w.C
[解决办法]
测试脚本(没有用with):
CREATE TABLE foo(
a VARCHAR2(20),
b VARCHAR2(20),
c VARCHAR2(20),
d VARCHAR2(20),
e VARCHAR2(20)
);
INSERT INTO foo VALUES ('11','22','33','A','0');
INSERT INTO foo VALUES ('11','22','33','B','2');
INSERT INTO foo VALUES ('11','22','33','C','1');
INSERT INTO FOO VALUES ('11','22','33','A','0');
INSERT INTO FOO VALUES ('11','22','33','B','2');
INSERT INTO FOO VALUES ('11','22','33','C','1');
INSERT INTO FOO VALUES ('22','22','33','D','0');
INSERT INTO FOO VALUES ('22','22','33','B','1');
INSERT INTO FOO VALUES ('33','22','33','C','2');
INSERT INTO FOO VALUES ('33','22','33','A','3');
INSERT INTO FOO VALUES ('44','22','33','K','0');
INSERT INTO FOO VALUES ('44','22','33','A','1');
INSERT INTO FOO VALUES ('55','22','33','Z','1');
查询SQL:
SELECT O.A,O.B,O.C,O.D,O.E FROM
(SELECT a,b,c,d,e,MAX(e) over(PARTITION BY a,b,c) AS eg FROM foo) o
WHERE o.eg =e;
查询结果:
ABCDE
112233B2
112233B2
222233B1
332233A3
442233A1
552233Z1