好的,所以标题有点复杂。这基本上是一个最大的每组类型的问题,但我不能为我的生活弄清楚。Postgres,table1左连接table2,表1中每个ID只有1行
我有一个表,user_stats:
------------------+---------+---------------------------------------------------------
id | bigint | not null default nextval('user_stats_id_seq'::regclass)
user_id | bigint | not null
datestamp | integer | not null
post_count | integer |
friends_count | integer |
favourites_count | integer |
Indexes:
"user_stats_pk" PRIMARY KEY, btree (id)
"user_stats_datestamp_index" btree (datestamp)
"user_stats_user_id_index" btree (user_id)
Foreign-key constraints:
"user_user_stats_fk" FOREIGN KEY (user_id) REFERENCES user_info(id)
我想要得到的统计信息通过最新的邮戳每个ID。这是一个较大的表,在41米行附近的地方,所以我创建的user_id的临时表,LAST_DATE使用:
CREATE TEMP TABLE id_max_date AS
(SELECT user_id, MAX(datestamp) AS date FROM user_stats GROUP BY user_id);
的问题是,邮戳是不是唯一的,因为可以有不止一天中的1次统计更新(本应该是一个真正的时间戳,但设计这个的人是一个白痴,现在还有太多数据可以回溯)。因此,一些标识有当我做JOIN多行:
SELECT user_stats.user_id, user_stats.datestamp, user_stats.post_count,
user_stats.friends_count, user_stats.favorites_count
FROM id_max_date JOIN user_stats
ON id_max_date.user_id=user_stats.user_id AND date=datestamp;
如果我这样做,因为子查询我想我可能会限制1,但我一直听说这些都是可怕的效率低下。思考?
“......我一直听说这些效率非常低下。”不要被卷入货物邪教! 'EXPLAIN'是你的朋友!试试看看查询优化器可以为你做什么。 – Charles 2010-07-22 04:17:47