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

按动态日期范围自动分组的SQL报表查询需求

动态分组的时间范围报表SQL查询方案

需求说明

编写SQL查询生成时间范围报表,需根据数据的日期跨度自动切换分组维度:

  • 日期跨度小于1个月:按天分组(同一天的记录合并)
  • 日期跨度小于1年:按月分组(同一月的记录合并)
  • 日期跨度大于1年:按年分组(同一年的记录合并)
    同时筛选出指定时间范围内的数据。

通用SQL查询语句

WITH date_range AS (
    SELECT
        MIN(createdAt) AS start_date,
        MAX(createdAt) AS end_date
    FROM ViewSell
    WHERE branchId = ? -- 替换为目标门店ID
)
SELECT
    branchId,
    ROUND(SUM(totalPrice), 2) AS sumTotalPrice,
    CASE
        WHEN DATEDIFF(day, dr.start_date, dr.end_date) < 30 THEN CAST(createdAt AS DATE)
        WHEN TIMESTAMPDIFF(year, dr.start_date, dr.end_date) < 1 THEN DATE_FORMAT(createdAt, '%Y-%m-01')
        ELSE DATE_FORMAT(createdAt, '%Y-01-01')
    END AS timeFrame
FROM ViewSell
CROSS JOIN date_range dr
WHERE branchId = ? -- 与上方替换为相同的门店ID
  AND createdAt BETWEEN dr.start_date AND dr.end_date
GROUP BY
    branchId,
    CASE
        WHEN DATEDIFF(day, dr.start_date, dr.end_date) < 30 THEN CAST(createdAt AS DATE)
        WHEN TIMESTAMPDIFF(year, dr.start_date, dr.end_date) < 1 THEN DATE_FORMAT(createdAt, '%Y-%m-01')
        ELSE DATE_FORMAT(createdAt, '%Y-01-01')
    END
ORDER BY timeFrame;

查询逻辑说明

  1. 计算日期跨度:通过CTE date_range 获取当前门店数据的最早和最晚日期,确定分组维度的判断依据
  2. 动态分组:使用CASE语句根据日期跨度选择分组规则:
    • 跨度<30天:将时间戳转为纯日期格式,按天聚合
    • 跨度≥30天且<1年:格式化为当月第一天,按月聚合
    • 跨度≥1年:格式化为当年第一天,按年聚合
  3. 数据筛选与聚合:筛选指定门店的时间范围内数据,汇总总价并按时间维度排序

示例验证

示例1:日期跨度小于1个月

原查询

SELECT
  *
FROM
  ViewSell
WHERE
  branchId = 1
ORDER BY
  createdAt ASC

原结果

idbranchIdtotalPricecreatedAt
8512718.662022-07-03 08:49:27.727
2613832.692022-07-06 09:08:06.880
8919569.852022-07-07 04:13:09.230
8011523.622022-07-07 04:38:29.313
1512500.212022-07-11 09:01:05.183
516874.032022-07-14 23:54:05.590
4519188.032022-07-17 05:35:48.560
9814426.172022-07-21 17:35:31.617
5413862.862022-07-22 05:18:28.553
7015668.822022-07-22 06:12:33.867
6513653.672022-07-26 08:29:03.587

期望结果

branchIdsumTotalPricetimeFrame
12718.662022-07-03
13832.692022-07-06
111093.472022-07-07
12500.212022-07-11
16874.032022-07-14
19188.032022-07-17
14426.172022-07-21
19531.682022-07-22
13653.672022-07-26

示例2:日期跨度小于1年

原查询

SELECT
  *
FROM
  ViewSell
WHERE
  branchId = 4
ORDER BY
  createdAt ASC

原结果

idbranchIdtotalPricecreatedAt
5247502.972023-11-01 17:49:51.110
5647337.752023-11-06 15:38:57.567
4449385.972024-01-18 11:19:04.460

期望结果

branchIdsumTotalPricetimeFrame
49385.972024-01-01
414840.722023-11-01

示例3:日期跨度大于1年

原查询

SELECT
  *
FROM
  ViewSell
WHERE
  branchId = 2
ORDER BY
  createdAt ASC

原结果

idbranchIdtotalPricecreatedAt
2225589.392020-05-23 15:22:14.703
4626103.082020-08-18 03:58:14.973
4824905.962020-10-14 23:57:48.680
8528953.032021-08-15 11:16:34.627
628132.462021-08-26 21:27:21.627
5321913.242021-09-20 17:41:13.793
423164.812022-03-18 04:24:40.840
2823506.162022-05-20 17:48:44.330
3727256.732022-07-25 20:45:16.497
1627470.382023-01-22 18:33:07.163
2725957.582023-03-22 03:04:02.687
9927722.432023-04-14 21:22:38.160
8124517.392023-04-25 11:25:17.900
7025562.042023-05-10 08:19:35.200
5529343.172023-11-17 08:56:09.870
9421056.382024-01-03 18:36:24.743
4728434.112024-03-23 09:07:31.743

期望结果

branchIdsumTotalPricetimeFrame
216598.432020-01-01
218998.732021-01-01
213927.702022-01-01
240572.992023-01-01
29490.492024-01-01

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.25 07:34:52