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

按日期排序员工首次入职月度统计结果的SQL问题

解决SQL月度入职统计的排序问题

你的问题出在按字符串格式的date排序上——'04/2021'和'05/2020'作为字符串比较时,会先看前两位的月份,'04'比'05'小,所以排在前面,这不符合日期的逻辑顺序。

给你两种简单的修复方案:

方案1:按原始日期字段的聚合值排序

直接在ORDER BY里用分组内的最小日期(因为同一个date分组下的minStartDate都属于同一个年月,所以MIN(sub.minStartDate)就是该年月的代表日期):

SELECT TO_CHAR(sub.minStartDate,'mm/YYYY') as date,
       COUNT(DISTINCT sub.id) AS nombre
FROM (
    SELECT MIN(sw.start_date) as minStartDate,
           e.id
    FROM employee e
         INNER JOIN social_work sw ON e.id = sw.employee_id
    GROUP BY e.id
    HAVING MIN(sw.start_date) BETWEEN '2020-01-01' AND '2022-12-31'
) sub
GROUP BY date
ORDER BY MIN(sub.minStartDate)

方案2:将字符串日期转换为日期类型排序

把输出的date字符串转回日期类型,再按日期排序:

SELECT TO_CHAR(sub.minStartDate,'mm/YYYY') as date,
       COUNT(DISTINCT sub.id) AS nombre
FROM (
    SELECT MIN(sw.start_date) as minStartDate,
           e.id
    FROM employee e
         INNER JOIN social_work sw ON e.id = sw.employee_id
    GROUP BY e.id
    HAVING MIN(sw.start_date) BETWEEN '2020-01-01' AND '2022-12-31'
) sub
GROUP BY date
ORDER BY TO_DATE(date, 'mm/YYYY')

为什么之前的尝试出错?

你把sub.minStartDate加入GROUP BY后,会把同一个年月下的不同具体日期(比如4月1日和4月15日)分成不同分组,导致原本应该合并的统计被拆分,所以出现了重复的04/2021行,count值也不对。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.02 20:45:42