我有一个表,看起来像合并多列单列
id cat data
--------------------
1 1 foo
2 1 bar
3 1 baz
4 2 some
5 2 random
6 3 Data 1
7 2 data
8 3 Data 2
9 3 Data 3
而且我想最后3个id
S和每个类别的data
在单行像
cat id1 data1 id2 data2 id3 data3
-----------------------------------------------------
1 1 foo 2 bar 3 baz
2 4 some 5 random 7 data
3 6 Data 1 8 Data 2 9 Data 3
我已经尝试以下内容:
获取最高的数据
id
每个cat
:SELECT id, data FROM tbl t1 WHERE EXISTS ( SELECT 1 FROM tbl t2 WHERE t1.cat = t2.cat GROUP BY t2.cat HAVING MAX(t2.id) = t1.id )
获取具有2个第二最高
id
S中的数据对于每个cat
:SELECT id, data FROM tbl t1 WHERE EXISTS ( SELECT 1 FROM tbl t2 WHERE t1.cat = t2.cat AND NOT EXISTS ( -- Not the highest value SELECT 1 FROM tbl t3 WHERE t1.cat = t3.cat GROUP BY t3.cat HAVING MAX(t3.id) = t2.id ) GROUP BY t2.cat HAVING MAX(t2.id) = t1.id )
获取具有3 RD最高
id
对于每个数据cat
:SELECT id, data FROM tbl t1 WHERE EXISTS ( SELECT 1 FROM tbl t2 WHERE t1.cat = t2.cat AND NOT EXISTS ( -- id is not 2nd highest SELECT 1 FROM tbl t3 WHERE t1.cat = t3.cat AND NOT EXISTS ( -- id is not the highest SELECT 1 FROM tbl t4 WHERE t1.cat = t4.cat GROUP BY t4.cat HAVING MAX(t4.id) = t3.id ) GROUP BY t3.cat HAVING MAX(t3.id) = t2.id ) AND NOT EXIST ( -- not the highest id SELECT 1 FROM tbl t5 WHERE t1.cat = t5.cat GROUP BY t5.cat HAVING MAX(t5.id) = t2.id ) GROUP BY t2.cat HAVING MAX(t2.id) = t1.id )
而现在,加入了整个事情。但我相信存在更好的解决方案。它是什么?
PS:我如果使用Informix 11.50或以上,则存在不完美的选择使用Informix
如果可以使用存储过程,它会给你的灵活性分阶段进行,参考之前的最大值。我可能会先写一个SP来检索指定cat的Max id,然后是WHERE id
2013-03-13 00:21:25
不幸的是,我只能读取数据库。 – 2013-03-13 10:13:51
然后我祝你好运,我所有的想法(除了将数据导出到MS SQL或Postgres的,并与热膨胀系数这样做!) – 2013-03-13 10:19:40