我有餐 table 预订,其中有数据
GUEST_NO HOTEL_NO DATE_FROM DATE_TO ROOM_NO
1 1 2015-05-07 2015-05-08 103
1 1 2015-05-11 2015-05-12 104
1 1 2015-05-14 2015-05-15 103
1 1 2015-05-17 2015-05-20 101
2 2 2015-05-01 2015-05-02 204
2 2 2015-05-04 2015-05-05 203
2 2 2015-05-17 2015-05-22 202
我想要的是得到结果。 1 ) 它应该将输出显示为Guest_no、Hotel_no、Room_no,并且列中的计数为前三列组合重复的次数。
所以输出应该像
GUEST_NO HOTEL_NO ROOM_NO Count
1 1 103 2
1 1 104 1
1 1 101 1
2 2 204 1
等等。但我希望结果按顺序排列,例如:输出应该是 order by bk.date_to desc
我的查询如下,它显示了我的计数,但如果我使用 order by 它不起作用
select bk.guest_no, bk.hotel_no, bk.room_no,
count(bk.guest_no+bk.hotel_no+bk.room_no) as noOfTimesRoomBooked
from booking bk
group by bk.guest_no, bk.hotel_no, bk.room_no, bk.date_to
order by bk.date_to desc
因此,添加 order by 结果显示不同,因为当我添加 order by date_to 列时,我必须添加此列也是 group by 子句,这最终会产生不同的结果,如下所示
GUEST_NO HOTEL_NO ROOM_NO Count
1 1 103 1
1 1 104 1
1 1 103 1
1 1 101 1
2 2 204 1
这不是我想要的输出。 我想要这四列,但按 date_to 列的 desc 排序,并计为前 3 列的重复次数
最佳答案
我认为一个好方法是按 guest_no、hotel_no 和 room_no 进行分组,并按每组中的最长(即最近)预订日期进行排序。
SELECT
guest_no,
hotel_no,
room_no,
COUNT(1) AS BookingCount
FROM
booking
GROUP BY
guest_no,
hotel_no,
room_no
ORDER BY
MAX(date_to) DESC;
关于按数据分组但带有 order by 子句的 SQL 查询,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30285121/