我的数据库中有以下模式:
CREATE TABLE users (
id integer NOT NULL
);
CREATE TABLE survey_results (
id integer NOT NULL,
name text,
user_id integer,
created_at timestamp without time zone
);
INSERT INTO users (id)
VALUES (1);
INSERT INTO survey_results (id, name, user_id, created_at)
VALUES (1, 'TEST 1', 1, now());
INSERT INTO survey_results (id, name, user_id, created_at)
VALUES (2, 'TEST 2', 1, now());
INSERT INTO survey_results (id, name, user_id, created_at)
VALUES (3, 'TEST 3', 1, now());
现在我想在一次查询中获取第一个和最后一个用户的姓名 survey_result,所以结果应该如下所示
id first last
1 TEST1 TEST2
我如何在 PostgreSQL 中执行此操作?
这是具有此模式的 sqlfiddle:https://www.db-fiddle.com/f/aC2DrJXqmJc1ZLkdEjLnht/0
最佳答案
是这样的:
select m.user_id,
f.name as first_survey,
f.created_at as first_survey_created,
l.name as last_survey,
l.created_at last_survey_created
from (
select user_id,
min(created_at) as first_created,
max(created_at) as last_created
from survey_results
group by user_id
) m
join survey_results f on f.user_id = m.user_id and f.created_at = m.first_created
join survey_results l on l.user_id = m.user_id and l.created_at = m.last_created;
但是,如果第一个和最后一个调查具有相同的 created_at
值
关于sql - PostgreSQL - 获取与一个查询的关系的第一个和最后一个记录,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49553657/