Я столкнулся с следующим 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.
(Цитата из здесь).
Однако они не точно объясняют, что происходит, когда вы это делаете.