postgresql 中的内部选择查询

问题描述 投票:0回答:1

我创建了如下表格

create table student (id integer, firstname varchar(100), lastname varchar(100), time varchar(100));
        insert into student (id, firstname, lastname, time) values (1, 'albert', 'einstein', 'today');
        insert into student (id, firstname, lastname, time) values (2, 'isaac', 'newton', 'today');
        insert into student (id, firstname, lastname, time) values (3, 'marie', 'curie', 'today');
        insert into student (id, firstname, lastname, time) values (4, 'Aneesh', 'pn', 'yesterday');
        insert into student (id, firstname, lastname, time) values (5, 'joe', 'curie', 'yesterday');
        insert into student (id, firstname, lastname, time) values (6, 'Aneesh', 'hahha', 'yesterday');
        insert into student (id, firstname, lastname, time) values (7, 'Aneesh', 'narayanan', 'today');
        select * from student;

现在我想根据时间查询数据 查询将是 输入的是时间。获取与输入时间匹配的所有记录,然后获取其名字并返回与该名字匹配的所有记录。

假设我将时间指定为“昨天”,那么它会返回

id| firstname | lastname| time
-------------------------------
4 | Aneesh    | pn | yesterday
5 | joe       | curie | yesterday
6 | Aneesh    | hahha | yesterday
7 | Aneesh    | narayanan | today

我尝试了以下查询但没有成功。一些语法错误

select (
                'Id',id,
                'FirstName',firstname,
                'LastName',lastname,
                'Time',time
          ) as json 
          from
            (
              select firstname from student
                where time= 'yesterday') as tt
             where firstname = tt.firstname;
postgresql stored-procedures
1个回答
0
投票

首先,在指定时间获取第一个firstname,然后将此数据集与您的表连接起来:

select  s.*
from student s
inner join (
  select firstname, time
  from student
  where time= 'yesterday'
  order by id
  limit 1
) as f on f.time = s.time or f.firstname = s.firstname
© www.soinside.com 2019 - 2024. All rights reserved.