Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/76.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
PostgreSQL查询问题_Sql_Postgresql - Fatal编程技术网

PostgreSQL查询问题

PostgreSQL查询问题,sql,postgresql,Sql,Postgresql,我有一个包含多个表的DB,它也有多个行/列,布局类似于下图 站点位于名为sites的表中,ID和类型位于名为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值并删除其他ID值来过滤结

我有一个包含多个表的DB,它也有多个行/列,布局类似于下图

站点位于名为sites的表中,ID和类型位于名为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值并删除其他ID值来过滤结果,因此,如果例如A0010的ID为1-20,我希望结果显示出来

A0010 20 Bla
忽略

A0010 1 Bla
A0010 2 Bla
以此类推,但我不确定如何进行,因为没有设置ID的编号,它可以是1-3或1-30,对于一个只有1列不同的站点,基本上给我30个结果(我只想过滤到最高值)。

这应该可以做到:

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
诀窍在于,如果有一个子查询为您提供站点+最大ID,则无法同时检索类型,尽管由于分组的原因,因此需要将其与实际表再次联接

在这里您可以找到关于表别名(
T1
T2
)的说明:
试试:

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

抱歉,我可以从一个表中完成整个查询。。。我在查询中添加了不必要的信息,我觉得自己太愚蠢了。按最大(ID)+1描述限制x从站点组按站点顺序选择站点,最大(ID)+1作为ID;工作做得很好。请不要链接到手册的过时版本,使用“当前”而不是“8.2”(除非提出问题的用户明确说明版本)当然,我不是一个Postgre人,只是链接到我通过谷歌找到的第一个版本,而且别名在以后的版本中不太可能改变,更新了当前版本的链接,谢谢。我实际上是想用current这个词,而不是版本号;)啊,好吧,当然,我不知道这项工作,不是像我说的那样一个博士后:)还有,我们怎么知道他们不会改变下一个文档的结构,链接不会进入任何地方?