You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何使用SQL查询bookings表总入住人数第二高的所有对应日期

查询总预订床位数第二高的所有日期SQL实现

以下代码为标准SQL语法,兼容MySQL 8.0+、PostgreSQL、SQL Server等主流数据库:

WITH daily_total AS (
    -- 按日期聚合计算每天的总入住人数
    SELECT 
        DATE(timestampOfBooking) AS booking_date,
        SUM(numberOfGuests) AS total_guests
    FROM bookings
    GROUP BY DATE(timestampOfBooking)
),
second_highest AS (
    -- 提取去重后总人数排名第二的数值
    SELECT DISTINCT total_guests
    FROM daily_total
    ORDER BY total_guests DESC
    LIMIT 1 OFFSET 1
)
-- 返回所有符合条件的日期
SELECT booking_date AS dates
FROM daily_total
WHERE total_guests = (SELECT total_guests FROM second_highest);
逻辑说明
  • 如果timestampOfBooking本身就是日期类型,可去掉DATE()函数直接分组;不同数据库的日期转换函数存在差异时,可替换为对应语法,例如SQL Server替换为CAST(timestampOfBooking AS DATE)
  • 当所有日期的总入住人数完全相同时,去重后的总人数列表只有1个值,OFFSET 1会返回空,最终查询结果自然为空,符合需求要求
  • 多个日期总人数同时等于第二高值时,会全部返回,无遗漏
样例验证

对应给出的测试数据:

  • 各日期总入住人数分别为:22/11/2021为2,23/11/2021为7,24/11/2021为7,25/11/2021为17
  • 去重后总人数降序排序为17、7、2,取到的第二高值为7
  • 最终返回23/11/2021、24/11/2021两个日期,和预期结果完全一致

内容的提问来源于stack exchange,提问作者Davin Vroegop

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.23 21:15:05