好的,标题有点令人费解。这基本上是每组最大的n型问题,但是我一生都无法解决。
我有一张表,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的统计信息。这是一张很大的表,在41m行附近。因此,我使用以下命令创建了一个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);
问题在于datestamp不是唯一的,因为一天中可能会有1个以上的统计更新(本来应该是真实的时间戳,但是设计此日期的人还是个白痴,现在有太多数据需要回溯)。因此,当我执行JOIN时,某些ID会有多行:
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,但是我一直听说它们效率极低。有什么想法吗?
DISTINCT ON是您的朋友。
select distinct on (user_id) * from user_stats order by datestamp desc;
我有一个包含字段“stock_id”的Table1Stocks和包含为每个股票订购的产品的Table2Productsordered以及一个Table3Store,每次有人更新Table1Stocks并将字段“Status”更改为“Received”时,我需要将Table2Productsordered中的行插入到Table3Store,其中Table2Productsordered字段“id_s
问题内容: 我是PostgreSQL的新手,正在尝试从SQL Server转换查询。 我有一个表Users,其中包括bUsrActive,bUsrAdmin和sUsrClientCode列。我想更新用户并设置bUsrActive = false,如果不存在另一个具有相同sUsrClientCode的用户,其中bUsrAdmin = true和bUsrActive = true。 在SQL Serv
给定table1.column1,我需要确定它是否有table2.column2的外键。 这个SQL将运行很多次,所以它需要相当快。 我见过一些解决方案,但是往往比我需要的更复杂(例如,数据库中的所有外键或表上的所有外键) 谢谢!
问题内容: 我读了许多关于仅获得左联接的第一行的主题,但是由于某种原因,这对我不起作用。 这是我的结构(当然是简化的) 提要 艺人 feeds_artists 现在,我想获取文章并仅加入第一位艺术家,我想到了这样的事情: 只是仅获取feeds_artists的第一行,但已经行不通了。 由于数据库原因,我无法使用,也无法按结果对结果进行分组(因为我需要按日期对它们进行排序(我通过这种方式对结果进行分
我读过很多关于只获得左联接的第一行的文章,但是,由于某些原因,这对我不起作用。 这里是我的结构(当然是简化的) 源 只获得feeds_artists的第一行,但这已经不起作用了。 由于数据库的原因,我不能使用并且我不能按对结果进行分组,因为我需要按日期对它们进行排序(我通过这样分组得到了结果,但结果不是最新的) 也尝试了一些外用的东西--也没有成功。老实说,我真的想象不出这些排是怎么回事--这可能
我有5张桌子要放在一起。表格包括:访客、报价、合同1、合同2和合同3。 查询: 这里的问题是,contracts1、contracts2和contracts3并没有公共列以便连接在一起。因此,我得到的不是合同1的20行,合同2的30行,合同3的50行,而是所有这些的组合。因为它们是根据访问者和提供的表加入的。查询结束时使用简单的GROUP BY通常可以解决问题,但如果我在最后对其中一个表(或所有表