当前位置: 首页 > 面试题库 >

在postgres查询中获取第一行

居焱
2023-03-14
问题内容

我正在使用内部联接从2个表中查询一些数据。

这是查询,

test_db=> select api_booking.install_ts, api_user.id from api_booking inner join api_user on api_booking.user_id=api_user.id and api_booking.status='completed' limit 20 ; 
          install_ts           | id 
-------------------------------+----
 2016-09-15 09:53:42.511367+00 |  9
 2016-10-12 11:37:11.438715+00 |  9
 2016-10-21 08:55:49.57813+00  |  9
 2017-02-27 06:12:17.362996+00 |  9
 2017-02-27 06:24:59.316051+00 |  9
 2017-02-28 06:15:35.00841+00  |  9
 2017-02-28 06:34:57.766365+00 |  9
 2017-05-23 14:40:54.831525+00 | 14
 2017-06-05 07:47:39.78306+00  | 17
 2017-06-05 07:55:30.171103+00 | 17
 2016-12-06 06:47:43.860581+00 | 19
 2016-09-09 07:34:58.40589+00  | 20
 2016-11-16 09:09:24.466439+00 | 24
 2016-10-03 02:52:24.419793+00 | 24
 2017-05-02 03:48:02.843209+00 | 24
 2017-05-08 10:01:45.77093+00  | 24
 2016-09-09 12:08:27.503695+00 | 27
 2016-09-10 10:05:44.617737+00 | 27
 2016-09-11 10:08:22.791411+00 | 27
 2016-09-12 08:56:31.462979+00 | 27
(20 rows)

现在,我只想要每个user_id的第一行。

像这样,

          install_ts           | id 
-------------------------------+----
 2016-09-15 09:53:42.511367+00 |  9
 2017-05-23 14:40:54.831525+00 | 14
 2017-06-05 07:47:39.78306+00  | 17
 2016-12-06 06:47:43.860581+00 | 19
 2016-09-09 07:34:58.40589+00  | 20
 2016-11-16 09:09:24.466439+00 | 24
 2016-09-09 12:08:27.503695+00 | 27

我应该为此使用什么查询?


问题答案:

这应该可以解决问题:

select distinct on (api_user.id) api_user.id,api_booking.install_ts 
from api_booking inner 
join api_user on api_booking.user_id=api_user.id 
and api_booking.status='completed' 
order by api_user.id,api_booking.install_ts
limit 20 ;


 类似资料:
  • 问题内容: 我想编写一条Postgres SQL语句,该语句表示查找颜色X和亮度Y的用户。如果该用户存在,则返回其所有行数据。如果不是,请创建新行并传递其他信息。这两个单独的语句将执行以下操作: 如果那什么都不返回,那么执行以下命令: 有没有一种方法可以将这些组合成一个查询? 问题答案: 在SQL DBMS中,select-test- insert方法是一个错误:没有什么可以阻止另一个进程在您的和

  • 问题内容: 是否有可能获得总表,并在相同的查询。像这样的东西 问题答案: 您可以随时尝试执行以下操作: 该子句将为您提供查询中所有行的计数。

  • 问题内容: 我在编写查询时遇到问题。 我想选择分组的每组行的第一行 我的桌子是: 我尝试使用以下SQL语句: 我得到以下输出: 但是我在每笔第一笔交易中都需要。 我需要像那样 请任何人可以帮助我 问题答案: SQL小提琴 MS SQL Server 2008架构设置 : 查询1 : 结果 :

  • 问题内容: 我有一个简单的MySQL表,其中包含类别列表,级别由parent_id确定: 我正在尝试进行面包屑跟踪。因此,我有孩子的“身份证”,我想让所有可用的父母(重复链,直到我们达到0“家”)。可能有任意数量或子行达到无限深度。 目前,我正在为每个父母使用SQL调用,这很麻烦。SQL中有一种方法可以对一个查询执行全部操作吗? 问题答案: 从这里改编: 该行是当前页面的页码。结果如下:

  • 问题内容: 我有一名学生(身份证,姓名,部门,年龄,分数)。我想找到每个系中得分最高(年龄最小的学生)的最小的学生。在SQL Server中,我可以使用以下SQL。 但是,在Oracle中,不能在子查询中使用order by子句,并且没有limit / top like关键字。我必须将学生表与自身连接两次以查询结果。在oracle中,我使用以下SQL。 有没有人有任何想法可以简化上述用于oracl

  • 我有用于分页的逻辑,它工作得非常好。这个问题是为了优化/改进我是如何做某事的。 我正在运行两个查询以获得结果集。第一个查询按限制和偏移量获取所有项,第二个查询获取总计数。我需要这个总数来计算表示层中的分页链接。 我想避免运行两个查询,如果可能的话,将它们合并成一个。 例如,如果数据库中有100项,并且我运行下面的查询时为1,为20,那么查询应该返回20个结果和100个计数。我目前在两个单独的查询中