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

如何用子查询筛选两日期区间内雇主数最多的公司名(处理重复日期)

解决思路与修正后的SQL语句

首先,你原SQL里的核心问题在于子查询用了top (1) with ties——这个语法会返回所有并列最大的FoundingDate,而你需要仅取第一个最大日期,所以第一步得把with ties去掉,只保留top 1。

另外,原SQL没体现「统计雇主数量」的逻辑,我默认你是要统计每个公司的雇主人数(要么公司表自带人数字段,要么需要关联员工表),然后找出人数最多的公司。下面分两种场景给出解决方案:

场景1:公司表自带雇主数字段(比如EmployeeCount)

-- 先拿到唯一的最晚成立日期
WITH MaxFoundingDate AS (
    SELECT TOP 1 FoundingDate 
    FROM Company 
    ORDER BY FoundingDate DESC
),
-- 统计日期范围内各公司的雇主数量
CompanyEmployeeStats AS (
    SELECT 
        c.CompanyName,
        c.EmployeeCount AS TotalEmployees
    FROM Company c
    JOIN MaxFoundingDate mfd 
        ON c.FoundingDate BETWEEN '2020-11-30' AND mfd.FoundingDate
    -- 注意:BETWEEN要把早日期放前面、晚日期放后面,不然会查不到数据
)
-- 找出雇主数量最多的公司
SELECT CompanyName
FROM CompanyEmployeeStats
WHERE TotalEmployees = (SELECT MAX(TotalEmployees) FROM CompanyEmployeeStats)

场景2:需要关联员工表统计人数

-- 先拿到唯一的最晚成立日期
WITH MaxFoundingDate AS (
    SELECT TOP 1 FoundingDate 
    FROM Company 
    ORDER BY FoundingDate DESC
),
-- 关联员工表统计各公司雇主数量
CompanyEmployeeStats AS (
    SELECT 
        c.CompanyName,
        COUNT(e.EmployeeId) AS TotalEmployees
    FROM Company c
    LEFT JOIN Employee e ON c.CompanyId = e.CompanyId
    JOIN MaxFoundingDate mfd 
        ON c.FoundingDate BETWEEN '2020-11-30' AND mfd.FoundingDate
    GROUP BY c.CompanyName
)
-- 找出雇主数量最多的公司
SELECT CompanyName
FROM CompanyEmployeeStats
WHERE TotalEmployees = (SELECT MAX(TotalEmployees) FROM CompanyEmployeeStats)

额外说明

  • 如果最后筛选时遇到多个公司雇主数量并列第一的情况,上面的语句会返回所有符合条件的公司;要是你只需要取其中第一个,可以在最后一步加上TOP 1 ORDER BY CompanyName。
  • 子查询里去掉with ties后,只会返回排序后的第一个最大日期,完美解决你遇到的「多个相同最大值日期」问题。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.11 07:58:18