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

Hadoop表查询改写:获取指定月份销量最高的日期

Hadoop表查询改写:获取指定月份销量最高的日期

嗨,我来帮你搞定这个查询改写!要找出8月销量最高的日期,咱们分两步来:先统计每天的销量,再筛选出销量最高的那天(或者所有并列最高的日期)。

方法一:简单版(只返回一个最高日期)

如果不介意有并列最高时只返回其中一个,用ORDER BY加LIMIT就够了,写法很直观:

SELECT sold_date, COUNT(*) AS daily_sales
FROM sales
WHERE sold_date BETWEEN '2023-08-01' AND '2023-08-31'
GROUP BY sold_date
ORDER BY daily_sales DESC
LIMIT 1;

这个查询先按日期分组统计每天的销量,再按销量从高到低排序,最后取第一条结果,就是销量最高的日期。

方法二:严谨版(返回所有并列最高的日期)

要是想把所有销量并列第一的日期都找出来,用窗口函数RANK()会更靠谱:

WITH daily_sales AS (
    -- 先算出8月每天的销量
    SELECT sold_date, COUNT(*) AS sales_count
    FROM sales
    WHERE sold_date BETWEEN '2023-08-01' AND '2023-08-31'
    GROUP BY sold_date
)
-- 给每天的销量排名,取排名第一的日期
SELECT sold_date, sales_count
FROM (
    SELECT sold_date, sales_count,
           RANK() OVER (ORDER BY sales_count DESC) AS sales_rank
    FROM daily_sales
) ranked_sales
WHERE sales_rank = 1;

这里先通过CTE(公共表表达式)算出每天的销量,再用RANK()给每个日期的销量排名,最后筛选出排名第一的记录——如果有多个日期销量相同且都是最高,它们都会被返回。

额外注意:如果日期带时间戳

要是你的sold_date字段是带具体时间的(比如2023-08-01 14:30:22),直接按sold_date分组会把同一天不同时间的订单分开统计,这时候得先把日期截断到“天”级别,以Hive为例可以用TRUNC()函数:

WITH daily_sales AS (
    SELECT TRUNC(sold_date, 'DAY') AS sale_day, COUNT(*) AS sales_count
    FROM sales
    -- 注意这里结束时间要加到当天最后一秒,避免漏掉8月31日的订单
    WHERE sold_date BETWEEN '2023-08-01' AND '2023-08-31 23:59:59'
    GROUP BY TRUNC(sold_date, 'DAY')
)
SELECT sale_day, sales_count
FROM (
    SELECT sale_day, sales_count,
           RANK() OVER (ORDER BY sales_count DESC) AS sales_rank
    FROM daily_sales
) ranked_sales
WHERE sales_rank = 1;

备注:内容来源于stack exchange,提问作者Jim

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.04.21 09:53:02