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

BigQuery SQL实现酒店预订数据按月份拆分统计跨月入住房晚及营收

BigQuery 酒店预订数据跨月拆分统计方案

核心思路是将每笔订单按实际入住的晚数拆分为单行记录,每一行对应一个入住日,再按酒店、入住月份维度聚合即可自动处理跨月订单的拆分需求,完整SQL如下:

WITH
-- 基础数据预处理,计算单晚营收
base_data AS (
  SELECT
    hotel_long_nm,
    arrival_dt,
    depart_dt,
    DATE_DIFF(depart_dt, arrival_dt, day) AS total_nights,
    rez_rate_total,
    -- 计算单晚营收,SAFE_DIVIDE避免除零报错
    SAFE_DIVIDE(rez_rate_total, DATE_DIFF(depart_dt, arrival_dt, day)) AS daily_revenue
  FROM
    `DATABASE.analytics.bookings`
  -- 过滤入住晚数为0的异常订单
  WHERE DATE_DIFF(depart_dt, arrival_dt, day) > 0
),
-- 拆分订单为单晚记录
split_nights AS (
  SELECT
    hotel_long_nm,
    daily_revenue,
    -- 提取入住日对应统计月份,格式为年-月
    FORMAT_DATE('%Y-%m', stay_date) AS report_month
  FROM base_data,
  -- 生成所有有效入住日期(离店当天不计入入住晚数)
  UNNEST(GENERATE_DATE_ARRAY(arrival_dt, DATE_SUB(depart_dt, INTERVAL 1 DAY), INTERVAL 1 DAY)) AS stay_date
)
-- 按酒店、月份聚合得到最终统计结果
SELECT
  hotel_long_nm AS 酒店名称,
  report_month AS 统计月份,
  COUNT(1) AS 预订房间数,
  ROUND(SUM(daily_revenue), 2) AS 总营收
FROM split_nights
GROUP BY hotel_long_nm, report_month
ORDER BY hotel_long_nm, report_month

逻辑说明

  • 跨月订单会自动按实际入住日期归属到对应月份,不需要额外做边界判断,符合你提到的拆分规则
  • 最终输出的字段可以直接匹配你需要的表格样式,可根据实际需求调整统计月份的格式、营收的保留小数位数

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.01 05:06:02