Sybase: HAVING działa w rzędach?
Natknąłem się na następujący 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
Wyniki tego SQL są
id ts
----------- -----------
1 10
2 5
Wygląda na to, że warunek HAVING jest stosowany do wierszy, a nie do grup. Czy ktoś może wskazać mi miejsce, w którym znajduje się dokumentacja Sybase 15.5, w której opisany jest ten przypadek? Widzę tylko „HAVING działa na grupach”. Najbliższe, jakie widzę w dokumentach, to:
Klauzula having może zawierać kolumny lub wyrażenia, które nie znajdują się na liście wyboru, a nie w klauzuli group by.
(Cytat ztutaj).
Jednak nie wyjaśniają dokładnie, co się dzieje, gdy to robisz.