sql - PostgreSQL - 获取与一个查询的关系的第一个和最后一个记录

标签 sql postgresql

我的数据库中有以下模式:

   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/

相关文章:

sql - 使用sql命令只返回表中奇数个数的记录

sql - 在 SQLite UPDATE 中模拟 ORDER BY 来处理唯一性约束

sql - Microsoft SQL Server Like 关键字

spring - 使用带有 H2 的序列导致无法找到要检索的行

sql - 将 Oracle CONNECT BY 迁移到 postgresql 10

sql - TFS 分支和数据库

where 子句中的 SQL 日期差异

postgresql - 将列名称和值的列表传递给 Psycopg

postgresql - 从容器内的 flask 应用程序连接到 postgres 容器

ruby-on-rails-3 - Postgresql (Rails 3) 合并列上的行(同一张表)