按数据分组但带有 order by 子句的 SQL 查询

标签 sql sql-server

我有餐 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/

相关文章:

sql - SQL Server 中的组合

sql-server - 将记录平铺到值不为空的单行中

iphone 图像到 Ruby on Rails - 内容主体错误,parse_multipart

sql - 如何在没有游标的情况下迭代另一个存储过程中的存储过程结果?

sql - 我想在sql server存储过程中传递参数选择查询

MySQL选择左连接为空的行

sql-server - 如何识别Sql Server中未命名的约束?

node.js - 使用 SQL Server 构建安全的动态查询

mysql - 如果mysql查询结果为空,我如何将默认值设置为0

php - 使用许多不同长度的数组从 foreach 将数据插入 db