سؤال

لدي شيء مثل هيكل البيانات التالي:

فئة 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
مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top