我遇到了以下 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 对组进行操作”。我在文档中看到的最接近的是:
have 子句可以包括不在选择列表中和 group by 子句中的列或表达式。
(从这里引用)。
但是,他们并没有准确地解释当你这样做时会发生什么。