2014-06-05 4 views
-1

У меня есть ниже структура таблицы, где для нескольких заказа номеров может быть сделано для нескольких даты с некоторым приоритетом,Группировка основана на двух колоннах

MeetingDate RoomID Priority 
----------- ------ -------- 
2014-06-05 2  2 
2014-06-05 3  3 
2014-06-06 3  3 

Я хочу, чтобы отфильтровать высокий приоритет RoomID для каждой даты, когда я использовать как meetingdate и RoomID, он не работает, по логике вещей он не будет работать, пожалуйста, дайте мне знать, для решения

ответ

0

Try:

SELECT 
    t1.MeetingDate, t1.RoomID 
FROM your_table t1 
INNER JOIN (
    SELECT MeetingDate, MAX(Priority) AS MaxPriority 
    FROM your_table 
    GROUP BY MeetingDate 
) t2 ON t1.MeetingDate = t2.MeetingDate AND t1.Priority = t2.MaxPriority 
+0

Благодарим за предоставление решения – user3682227

0

Если ваш приоритет 1 = наивысший приоритет и 3 = низкая, вы могли бы искать

select 
     yt.meetingDate, 
     yt.roomID, 
     min(yt.priority) as highestPriority, 
     count(*) as TimesBooked 
    from 
     yourTable yt 
    group by 
     yt.meetingDate, 
     yt.roomID 

Так этот путь, вы получите только одну запись для данной даты и номер с наивысшим приоритетом. Если ваш приоритет отменен, где 1 имеет низкий приоритет, а 3 - высокий, то просто измените значение MIN() на MAX()

Кроме того, если вы хотите узнать, были ли какие-либо ВОЗМОЖНЫЕ конфликты (например: номер для заданной даты), вы можете добавить счет, который я добавил выше. Итак, если у кого-то есть «TimesBooked» больше 1, у вас, вероятно, есть конфликт/двойное бронирование.

+0

Спасибо, как найти номера с одинаковым приоритетом? – user3682227

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