基于两列分组

时间:2014-06-05 12:34:43

标签: sql

我有以下表格结构,可以为多个日期进行多个房间预订,并优先考虑,

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

我想为每个日期过滤高优先级的房间,当我同时使用meetdate和roomid时,它不起作用,从逻辑上说它不起作用,请告诉我解决方案

2 个答案:

答案 0 :(得分:0)

尝试:

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

答案 1 :(得分: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,你可能有冲突/双重预订。