Sybase:HAVING 对行进行操作?

2024-04-14

我遇到过以下 SYBASE SQL:

-- Setup first
create table #t (id int, ts int)
go

insert into #t values (1, 2)
insert into #t values (1, 10)
insert into #t values (1, 20)
insert into #t values (1, 30)

insert into #t values (2, 5)
insert into #t values (2, 13) 
insert into #t values (2, 25)
go

declare @time int select @time=11
-- This is the SQL I am asking about
select * from (select * from #t where ts <= @time) t group by id having ts = max(ts)
go

这条SQL的结果是

 id          ts          
 ----------- ----------- 
           1          10 
           2           5 

这看起来像是 HAVING 条件应用于行而不是组。有人可以指出 Sybase 15.5 文档中描述此案例的位置吗?我所看到的只是“HAVING 对组进行操作”。我在文档中看到的最接近的是:

having 子句可以包含不在其中的列或表达式 选择列表而不是在 group by 子句中。

(引自here http://infocenter.sybase.com/help/index.jsp?topic=/com.sybase.help.ase_15.0.commands/html/commands/commands60.htm).

然而,他们并没有准确解释当你这样做时会发生什么。


我的理解:是的,从根本上来说,HAVING 是对行进行操作的。通过省略 GROUP BY,它对单个“超级组”内的所有结果行进行操作,而不是对组内的行进行操作。阅读本节“分组依据和聚合查询如何工作”在您最初链接的 Sybase docco 中:-

分组依据和聚合查询如何工作

  • The where子句排除不满足其搜索条件的行;对于分组或非分组查询,其功能保持不变。
  • The group by子句将剩余行收集到一组中的每个唯一值group by表达。省略group by为整个表创建一个组。
  • 选择列表中指定的聚合函数计算每个组的汇总值。对于标量聚合,表中只有一个值。向量聚合计算不同组的值。
  • The having clause excludes groups from the results that do not meet its search conditions. Even though the having clause tests only rows, the presence or absence of a group by clause may make it appear to be operating on groups:
    • 当查询包含group by, having排除结果组行。这就是为什么having似乎是对团体进行操作。
    • 当查询没有group by, having从(单组)表中排除结果行。这就是为什么having似乎对行进行操作(结果类似于where子句结果)。

其次,该部分中出现一个简短的摘要“having、group by 和 where 子句如何相互作用” http://infocenter.sybase.com/help/index.jsp?topic=/com.sybase.help.ase_15.0.sqlug/html/sqlug/sqlug122.htm:-

having、group by 和 where 子句如何相互作用

当您包括having, group by, and where查询中的子句,每个子句影响行的顺序决定了最终结果:

  • The where子句排除不满足其搜索条件的行。
  • The group by子句将剩余行收集到一组中的每个唯一值group by表达。
  • 选择列表中指定的聚合函数计算每个组的汇总值。
  • The having子句从最终结果中排除不满足搜索条件的行。

@SQLGuru 的解释就是对此的说明。

Edit...

与此相关的是,我对利用 TSQL“扩展列”的不符合 ANSI 的查询的行为感到惊讶。 Sybase 处理扩展列(i)在 WHERE 子句之后(ii)通过创建与原始表的额外连接以及(iii)连接中不使用 WHERE 子句。此类查询可能返回比预期更多的行,然后 HAVING 子句需要附加条件来过滤掉这些行。

查看示例b, c and d under “对 group by 和having 的 Transact-SQL 扩展”在您最初链接的 docco 的页面上。我发现安装它很有用pubs2来自 Sybase 的示例数据库与示例一起使用。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Sybase:HAVING 对行进行操作? 的相关文章

随机推荐

  • 定义引发异常的 lambda 表达式

    如何编写相当于以下内容的 lambda 表达式 def x raise Exception 以下行为是不允许的 y lambda raise Exception 给 Python 换肤的方法不止一种 y lambda for in thro
  • 在屏幕中间创建可滚动选项卡的最佳方法?

    当您使用个人资料时 Twitter 的移动应用程序在屏幕中间有一个可滚动的选项卡 当您单击屏幕中间的可滚动选项卡时 显示您的个人资料信息等的屏幕上半部分不会改变 推文和回复 媒体 等 我想知道如何创建这个 让一半的屏幕保持不变 然后有改变中
  • boost::uuids::random_generator 和多线程的唯一性

    当我使用单线程生成随机数时 生成的 4M uuid 中没有重复项 但如果我使用两个线程生成每个 1M 我会看到大约 16 20 个重复项 可能是什么原因 class TestUuid public std string GenerateUU
  • History.js 和标头重定向

    我在使用history js 时遇到问题 我不知道如何解决 在我正在开发的网站上 我们使用 History js 在页面之间移动 如果您单击任何链接 history js 就会通过 AJAX 加载 URL 更新 URL 并为内容创建过渡效果
  • gnuplot - 两个图的交集

    我在用gnuplot绘制来自两个单独的 csv 文件的数据 在此链接中找到 https drive google com open id 0B2Iv8dfU4fTUZGV6X1Bvb3c4TWs https drive google com
  • 未检测到 iOS 应用程序 URL

    我已经为我的 iOS 应用程序创建了一个自定义应用程序 URL URL 格式类似于 myappname texttobeparsed 当我将 URL 粘贴到 Safari 中时 我的应用程序会打开并正确处理该 URL 效果很好 问题是 iM
  • 如何理解Python中的i和-i? python 中的位操作

    我发现Python中的 表示基于位表达式的 与 运算 最近 我发现了一个非常聪明的代码 其中一行类似于 i i 其中 i 是一个整数 如何理解 i i 的结果 另外 python如何处理负整数 i 进行位操作 i i 清除所有位 1 但最后
  • 聚合物示例代码在 Firefox 中不起作用

    我正在尝试 Google 提供的示例代码https www polymer project org 1 0 start first element intro https www polymer project org 1 0 start
  • 使用node.js fs.writeFile写入二进制数据以创建图像文件

    我正在尝试用 node js 编写画布数据fs writeFile https nodejs org api fs html fs fs writefile file data options callback作为二进制文件 JPEG 文件
  • WebSocket 连接到 TIdHTTPServer,握手问题

    我正在使用 C Builder 10 1 Berlin 编写一个简单的 WebSocket 服务器应用程序 该应用程序在端口上侦听从 Web 浏览器 例如 Google Chrome 发送的一些命令 在我的表单上 我有一个 TMemo TB
  • Android 视觉人脸检测与视频流

    我正在尝试将人脸检测 API 集成到从 Parrot Bebop 无人机接收的视频流中 使用 MediaCodec 类对流进行解码 http developer android com reference android media Med
  • 使用JS将网页直接保存为PDF [关闭]

    Closed 此问题正在寻求书籍 工具 软件库等的推荐 不满足堆栈溢出指南 help closed questions 目前不接受答案 我想将网页直接保存为PDF 我所做的是
  • 没有插件目标绑定到 Maven 阶段

    在 Maven 中相当新 通过阅读 Maven 文档官方网站 http maven apache org guides introduction introduction to the lifecycle html 我知道在默认的生命周期中
  • 中止先前正在运行的 Ajax 请求 [重复]

    这个问题在这里已经有答案了 是否可以中止先前运行的 Ajax 请求 var xhr ajax type POST url some php data name John location Boston success function ms
  • 如何在 MongoDB shell 中将 NumberDecimal 转换为 Double?

    我有一个 文本 字段为的文档NumberDecimal type id ObjectId 5d1a202e476381c30cd995a4 test NumberDecimal 0 1 如何将 测试 字段从NumberDecimal to
  • 排除具有特定值的特定记录 SQL Select

    我使用了下面线程中的解决方案 由 AdaTheDev 提供 因为它涉及同一问题 如何在sql select中排除具有特定值的记录 https stackoverflow com questions 15389091 how to exclu
  • 将命令行参数传递给 sql (Postgres)

    如何将命令行参数传递给运行的 sql 文件psql Postgres i e psql mydatabase lt mysqlfile sql arg1 arg2 arg3 这可能吗 Use 变量插值功能 https www postgre
  • 如果 AppsScript 服务已被限制,如何让脚本再次运行?

    我将此绑定脚本添加到谷歌工作表中 试图通过不必在单元格中手动输入工作表名称来节省时间 function sheetname return SpreadsheetApp getActive getName 然后我意识到它不稳定 所以我停止从工
  • 如何修复此 UnknownHostException?

    public static final String readURL String url throws Throwable try InputStream in InputStream fetch url byte bArr readBy
  • Sybase:HAVING 对行进行操作?

    我遇到过以下 SYBASE SQL Setup first create table t id int ts int go insert into t values 1 2 insert into t values 1 10 insert