4

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

类别开始日期时间结束日期时间
================================================
1 2009 年 12 月 1 日 12:00 2009 年 12 月 1 日 12:12
1 2009 年 12 月 1 日 04:00 2009 年 12 月 1 日 04:20
2 2009 年 12 月 2 日 10:15 2009 年 12 月 2 日 10:22
2 2009 年 12 月 2 日 11:00 2009 年 12 月 2 日 11:01

我想要每个类别的最小 StartDateTime 和最大 EndDateTime。像这样:

类别 MinStartDateTime MaxEndDateTime
================================================
1 2009 年 12 月 1 日 12:00 2009 年 12 月 1 日 04:20
2 2009 年 12 月 2 日 10:15 2009 年 12 月 2 日 11:01

使用按类别分组的 min & max 似乎不起作用:

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。

4

1 回答 1

7

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

select
    Category,
    min(StartDateTime) [MinStartDateTime],
    max(EndDateTime) [MaxDateTime]
from MyTable
group by
    Category
order by
    Category,
    MinStartDateTime,
    MaxDateTime
于 2009-07-08T16:24:48.863 回答