Sql HLGEM我并不期待另一个结果——我希望有人能在Sybase文档中为我指出一个地方,以保证这个结果不是偶然的。正如你所说,我可能得不到我所期望的——除非Sybase在某个地方正式描述了这一点。我确实看到它在做你所描述的事情。然而,如果have对组进行操作,

Sql HLGEM我并不期待另一个结果——我希望有人能在Sybase文档中为我指出一个地方,以保证这个结果不是偶然的。正如你所说,我可能得不到我所期望的——除非Sybase在某个地方正式描述了这一点。我确实看到它在做你所描述的事情。然而,如果have对组进行操作,,sql,sap-ase,Sql,Sap Ase,HLGEM我并不期待另一个结果——我希望有人能在Sybase文档中为我指出一个地方,以保证这个结果不是偶然的。正如你所说,我可能得不到我所期望的——除非Sybase在某个地方正式描述了这一点。我确实看到它在做你所描述的事情。然而,如果have对组进行操作,那么它对id==1的组有什么作用?必须包括整个组,因为它有一行与HAVING条件匹配(ts=10),或者必须排除整个组,因为它有一行与HAVING条件不匹配(ts=2)。事实上(以及您所描述的),我们包含了组中的一些行,而排除了一些行。我们在哪


HLGEM我并不期待另一个结果——我希望有人能在Sybase文档中为我指出一个地方,以保证这个结果不是偶然的。正如你所说,我可能得不到我所期望的——除非Sybase在某个地方正式描述了这一点。我确实看到它在做你所描述的事情。然而,如果have对组进行操作,那么它对id==1的组有什么作用?必须包括整个组,因为它有一行与HAVING条件匹配(ts=10),或者必须排除整个组,因为它有一行与HAVING条件不匹配(ts=2)。事实上(以及您所描述的),我们包含了组中的一些行,而排除了一些行。我们在哪里可以看到所描述的功能?这是我的问题。谢谢你让我注意到下面的语言。这正是我需要看到的,但我没有看到。尽管having子句只测试行,但GROUPBY子句的存在或不存在可能会使其看起来是在组上操作,因此当我们在select列表中有未分组、未聚合的列时,组不再是一行,而是多行。在每一行上都有作品。谢谢@阿卡迪,没问题。我编辑了我的答案,并总结了一些我当时觉得有用的额外信息。我希望它不会混淆原来的问答。
-- 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
 id          ts          
 ----------- ----------- 
           1          10 
           2           5 
id   ts
1    2
1    10
2    5
id   ts
1    10
2    5
select *
from (select t.*,
             max(ts) over (partition by id) as maxts
      from #t
      where ts <= @time
     ) t
where ts = maxts