2013-11-22 3 views
0

У меня есть общий запрос, где я группирую по id и беру поле date1 из первого и date2 из последней строки в каждой группе. То, что я хотел бы сделать, это группировать только в том случае, если между двумя датами нет разницы.Группа, если условие

Скажем, например, что у меня есть эта таблица:

id  date1  date2 
1  1-1-2012 5-5-2012 
1  5-5-2012 27-6-2012 
2  26-4-2012 23-8-2012 
2  22-5-2012 5-6-2012 

Я хотел бы сделать этот выбор:

id  date1  date2 
1  1-1-2012 27-6-2012 
2  26-4-2012 23-8-2012 
2  22-9-2012 5-12-2012 

У меня есть очень большой стол, так что запрос должен быть относительно эффективным. Любые предложения о том, как это можно сделать?

+1

Просьба пояснить логику, которая приводит к тому, что вторая строка для id = 2 в вашем желаемом выходе. – HansUp

+0

Я думаю, что третья строка была ошибкой с моей стороны. – Kresten

ответ

0

Это не даст вам ответа, но это может помочь кому-то преодолеть финишную черту. Я просто не был мой кофе еще ...: о)

SELECT T1.ID, Min(T1.Date1) as Dt1A, Max(T1.Date2) as Dt2A, Max(T2.Dt1) as Dt1B, Max(T2.Dt2) as Dt2B, IIF(Max(T2.Dt1) = Max(T2.Dt2), "True", "False") as Status 
FROM tblDateStuff as T1 
LEFT JOIN (
    SELECT ID, Max(Date1) as Dt1, Min(Date2) as Dt2 
    FROM tblDateStuff 
    GROUP BY ID 
    ORDER BY ID ASC) as T2 
ON T1.ID = T2.ID 
GROUP BY T1.ID 
ORDER BY T1.ID ASC 

Вам может понадобиться, чтобы обернуть весь этот блок кода в блок большего и сделать что-то с этим. Кажется, что вы хотите группировать только если Status = «True», но я не могу понять, как это сделать.

+0

Я не знал, что могу использовать min(), max(), fist() и last() как функции в groupe путем выбора. Я попробую использовать их, чтобы построить что-то. – Kresten

Смежные вопросы