我有一个包含多个表格的数据库,这些表格也有多个行/列,其布局类似于下图所示。
该站点位于名为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列不同(我想过滤到最高值)。
答案 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,因此您需要再次将其与实际表连接。
您可以在此处找到关于表别名(T1
和T2
)的说明:
http://www.postgresql.org/docs/9.1/static/queries-table-expressions.html#QUERIES-TABLE-ALIASES