PostgreSQL查询问题

时间:2012-03-01 10:11:00

标签: sql postgresql

我有一个包含多个表格的数据库,这些表格也有多个行/列,其布局类似于下图所示。

该站点位于名为sites的表中,ID和Type位于标记为Site_EQ的表中

Site  ID Type  
A0004  2 abc
A0004  3 abcd
A0004  4 abcde
A0005  2 abc
A0005  3 abcd
A0005  4 abcde 
A0005  5 abc  
A0005  6 abcd 
A0005  7 abcde

基本上我要做的是通过网站过滤结果,找到每个网站的最高ID值并删除其他网站,所以如果例如A0010的ID为1-20,我希望显示结果。

A0010 20 Bla

并忽略

A0010 1 Bla
A0010 2 Bla

依此类推,但我不确定如何这样做,因为没有固定数量的ID可能是1-3或1-30,基本上只给我30个结果,一个网站只有1列不同(我想过滤到最高值)。

2 个答案:

答案 0 :(得分:1)

尝试:

select Site, ID, Type from
(select s.*, row_number() over (partition by Site order by ID desc) rn
 from Site_EQ) q
where rn=1

答案 1 :(得分:0)

这应该这样做:

SELECT T1.Site, T1.ID, T1.Type
FROM SomeTable T1, (SELECT Site, MAX(ID) AS ID
                    FROM SomeTable
                    GROUP BY Site) T2
WHERE T2.Site = T1.Site
AND T2.ID = T1.ID

诀窍是有一个子查询,它为您提供了Site +最大ID,但由于分组,您无法同时检索Type,因此您需要再次将其与实际表连接。

您可以在此处找到关于表别名(T1T2)的说明:
http://www.postgresql.org/docs/9.1/static/queries-table-expressions.html#QUERIES-TABLE-ALIASES