sql - 使用最大/聚合函数
问题描述
我正在努力使用 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)
解决方案
我看到的问题是没有简单的方法告诉 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;
推荐阅读
- javascript - 将文本附加到单个文本区域 - 按段落分隔(使用 javascript)
- kubernetes - 执行到另一个容器并访问其目录的最佳方法是什么?
- android - 我的 android 应用是否需要使用 Google Play In-app Billing 进行应用内订阅?
- php - 从 php 返回 json 到 Ajax 调用
- vba - 如何加快这个过程?
- java - “jdbc.drivers”系统属性是什么以及在哪里?
- c++ - 将 ISO8601 字符串转换为自纪元以来的毫秒数
- css - 为什么我的容器在鼠标移出时不会返回悬停前的状态?
- php - 解析 json_decoded php 数组的最佳方法
- python - 如何自动跟踪所有函数调用和参数?