我有类似以下数据结构的东西:
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/