首页 > 解决方案 > 使用最大/聚合函数

问题描述

我正在努力使用 SQL 聚合函数,并且发现很难找到它们的任何用途,因为规则非常严格。谁能告诉我为什么下面的第一个查询不起作用,为什么第二个查询给出相同的行,只是顺序不同?我要做的是找到 10 的 BORROWER_ID 的最大值的日期和位置。

对于第一个查询,我希望只返回一行。这是在 Sybase 上运行的,但我认为其他版本的 SQL 会类似。

我看到的问题是没有简单的方法告诉 SQL 我们想要为其中的单个最大列返回一行的各个列。

1> select CREATE_LOCATION, max(CREATE_DATE) from LOAN where BORROWER_ID=10 group by CREATE_DATE
2> go
CREATE_LOCATION
--------------- -------------------------------
SSU                         Jun 18 2001  9:28AM
SSU                         Feb 12 2001 11:49AM
SSU                         Sep 10 2000 10:43AM
SSU                         Sep 10 2000 10:43AM
SSU                         Sep 10 2000 10:43AM
SSU                         Sep 10 2000 10:43AM
SSU                         Sep 10 2000 10:43AM

(7 rows affected)
1> select CREATE_LOCATION, CREATE_DATE from LOAN where BORROWER_ID=10
2> go
CREATE_LOCATION CREATE_DATE
--------------- -------------------------------
SSU                         Sep 10 2000 10:43AM
SSU                         Sep 10 2000 10:43AM
SSU                         Sep 10 2000 10:43AM
SSU                         Sep 10 2000 10:43AM
SSU                         Sep 10 2000 10:43AM
SSU                         Jun 18 2001  9:28AM
SSU                         Feb 12 2001 11:49AM

(7 rows affected)

标签: sqlaggregate-functionssybase

解决方案


我看到的问题是没有简单的方法告诉 SQL 我们想要为其中的单个最大列返回一行的各个列。

有一个简单的方法。它只是不使用聚合。请记住:聚合的目的是将FROM子句生成的多行组合成结果集中的单行。

相反,使用order by

select l.*
from loan l
where borrower_id = 10
order by create_date desc
fetch first 1 row only;

在 Sybase 中,您将使用top (1)而不是fetch

select top (1) l.*
from loan l
where borrower_id = 10
order by create_date desc
fetch first 1 row only;

推荐阅读