SQL MIN / MAX Group حسب السؤال
-
11-09-2019 - |
سؤال
لدي شيء مثل هيكل البيانات التالي:
فئة 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
أريد أن Min StartDatetime و Max EndDateTime لكل فئة. مثله:
الفئة MinStartDatateTime MaxendDateTime =============================================== 1 12/1/2009 12:00 12/1/2009 04:20 2 12/2/2009 10:15 12/2/2009 11:01
لا يبدو أن استخدام Min & Max مع مجموعة حسب الفئة تعمل:
select
Category,
min(StartDateTime) [MinStartDateTime],
max(EndDateTime) [MaxDateTime]
from
MyTable
group by
Category
order by
Category,
StartDateTime,
EndDateTime
كما أنني جربت اثنين من الانضمام الداخلي على استعلام فرعي لكل دقيقة وبيان أقصى، ولكن يبدو أنه يستبعد بعض السجلات:
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.
المحلول
الحل الأول الخاص بك يبدو صحيحا باستثناء النظام حسب البند؛ يحاول:
select
Category,
min(StartDateTime) [MinStartDateTime],
max(EndDateTime) [MaxDateTime]
from MyTable
group by
Category
order by
Category,
MinStartDateTime,
MaxDateTime
لا تنتمي إلى StackOverflow