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

如何用SQL分析精品店3个月销售数据找出一天中最繁忙时段

找出一天中最繁忙的销售时段

嘿,你已经搞定了最繁忙日期的问题,接下来处理时段其实很直观——核心就是把TIME字段按你需要的粒度(比如小时、30分钟区间)分组,统计每个时段的销售次数,然后找出数值最高的那个就行。下面给你分情况说明具体的SQL写法:

1. 按小时统计(最常用的粒度)

如果你的目标是找出哪个小时销量最高,可以提取TIME字段的小时部分,然后分组计数。不同数据库的函数略有区别:

MySQL/MariaDB

-- 若只想统计你找到的最繁忙日期,添加WHERE条件即可
SELECT 
    HOUR(TIME) AS sale_hour,
    COUNT(SALE_ID) AS total_sales
FROM your_sales_table
-- WHERE DATEOF = '2/18/2017' -- 替换成你确定的最繁忙日期
GROUP BY sale_hour
ORDER BY total_sales DESC
LIMIT 1;

PostgreSQL

PostgreSQL用EXTRACT函数提取小时:

SELECT 
    EXTRACT(HOUR FROM TIME::TIME) AS sale_hour,
    COUNT(SALE_ID) AS total_sales
FROM your_sales_table
-- WHERE DATEOF = '2017-02-18' -- 注意匹配PostgreSQL的日期格式
GROUP BY sale_hour
ORDER BY total_sales DESC
LIMIT 1;

SQL Server

用DATEPART函数实现:

SELECT TOP 1
    DATEPART(HOUR, TIME) AS sale_hour,
    COUNT(SALE_ID) AS total_sales
FROM your_sales_table
-- WHERE DATEOF = '2017-02-18'
GROUP BY DATEPART(HOUR, TIME)
ORDER BY total_sales DESC;

2. 更精准的粒度:按30分钟区间统计

如果想细化到半小时区间(比如区分9:00-9:30和9:30-10:00),可以用下面的方式分组:

MySQL示例

SELECT 
    CONCAT(
        HOUR(TIME), 
        ':', 
        FLOOR(MINUTE(TIME)/30)*30
    ) AS time_interval,
    COUNT(SALE_ID) AS total_sales
FROM your_sales_table
-- WHERE DATEOF = '2/18/2017'
GROUP BY time_interval
ORDER BY total_sales DESC
LIMIT 1;

这个查询会把时间整理成9:00、9:30、10:00这类30分钟区间,再统计每个区间的销量。

针对你的样本数据补充说明

看你提供的样本数据,仅DAY_OF_WEEK=4的记录里,9点时段的销售就有8条左右,用上面的查询就能直接定位到这个高峰时段。另外如果你的TIME字段是字符串类型(而非数据库原生时间类型),需要先转换格式,比如MySQL里可以用STR_TO_DATE(TIME, '%H:%i')来转换后再处理。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.15 03:27:50