这可能已经被问到,但StackOverflow是巨大的,并试图谷歌的具体事情足以实际帮助是一场噩梦!SQL - 加入两个结果表,重构想法?
我已经结束了一个相当大的SQL查询,并想知道是否可以指出更容易的方法来做到这一点,我可能错过了。
我有一个名为usage
结构如下表:
host | character varying(32) |
usage | integer |
logtime | timestamp without time zone | default now()
我想同时为MAX和MIN logtimes使用值。通过我的一些旧课本的工作(以来我真正使用SQL正确一段时间)之后,我结束了与此连接:
SELECT *
FROM (SELECT u.host,u.usage AS min_val,r2.min
FROM usage u
JOIN (SELECT host,min(logtime) FROM usage GROUP BY host) r2
ON u.host = r2.host AND u.logtime = r2.min) min_table
NATURAL JOIN (SELECT u.host,u.usage AS max_val,r1.max
FROM usage u
JOIN (SELECT host,max(logtime) FROM usage GROUP BY host) r1
ON u.host = r1.host AND u.logtime = r1.max) max_table
;
这似乎是一个混乱的方式做到这一点,因为我基本上运行相同的查询两次,一次使用MAX,一次使用MIN。通过执行SELECT usage,MAX(logtime),MIN(logtime) FROM ...
,我可以在一个查询中获得两个日志时间列,但是我无法确定如何显示与这两个不同记录对应的使用情况值。
任何想法?
哪个版本的PostgreSQL? – 2011-12-31 16:05:04
PostgreSQL 9.1.2! 编辑:虽然这将最终连接到一个不受我管理的数据库,它运行的是8.4.9,如果这会造成很大的差异? – shearn89 2011-12-31 16:07:42