SQL 最小/最大组按问题

标签 sql sap-ase

我有类似以下数据结构的东西:

Category    StartDateTime       EndDateTime
===============================================
1           12/1/2009 12:00     12/1/2009 12:12
1           12/1/2009 04:00     12/1/2009 04:20
2           12/2/2009 10:15     12/2/2009 10:22
2           12/2/2009 11:00     12/2/2009 11:01

I want the min StartDateTime and max EndDateTime for each Category. Like this:

Category    MinStartDateTime    MaxEndDateTime
===============================================
1           12/1/2009 12:00     12/1/2009 04:20
2           12/2/2009 10:15     12/2/2009 11:01

Using min & max with a group by Category doesn't seem to work:

select
    Category,
    min(StartDateTime) [MinStartDateTime],
    max(EndDateTime) [MaxDateTime]
from
    MyTable
group by
    Category
order by
    Category,
    StartDateTime,
    EndDateTime

我还为每个 min 和 max 语句在子查询上尝试了两个内部联接,但是它似乎排除了一些记录:
select distinct
    T1.Category,
    T1.StartDateTime [MinStartDateTime],
    T1.EndDateTime [MaxEndDateTime]

from
    MyTable T1

inner join
    (select
        Category,
        min(StartDateTime) [MinStartDateTime]
     from
        MyTable
     group by
        Category) T2
on T2.Category = T1.Category and T2.MinStartDateTime = T1.StartDateTime

inner join
    (select
        Category,
        max(EndDateTime) [MaxEndDateTime]
     from
        MyTable
     group by
        Category) T3
on T3.Category = T1.Category and T3.MaxEndDateTime = T1.EndDateTime

order by
    T1.Category,
    T1.encodeStartDateTime,
    T1.encodeEndDateTime

有任何想法吗?数据库是 Sybase ASE,它应该符合 SQL-92。

最佳答案

除了 order by 子句外,您的第一个解决方案看起来是正确的;尝试:

select
    Category,
    min(StartDateTime) [MinStartDateTime],
    max(EndDateTime) [MaxDateTime]
from MyTable
group by
    Category
order by
    Category,
    MinStartDateTime,
    MaxDateTime

关于SQL 最小/最大组按问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1099120/

相关文章:

mysql - 检索每个组中的最后一条记录 - MySQL

java - 将 clojure vec 传递给 POSTGRES IN 语句(?)

java - Hibernate 无法解析列

tsql - T-SQL 中临时表索引的最佳使用

java - 我可以在已打开的 JTDS 连接上更改 'appName' 吗?

datetime - Sybase 如何获得用破折号分隔的日期 yyyy-mm-dd?

php - SQL:使用联接从多个表中删除

mysql - 如果行不存在,如何从表中返回计数为 0?

stored-procedures - 在 Sybase ASE 15.0 中处理从一个存储过程到另一个存储过程的错误

java - hibernate 中的交叉连接问题