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

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

解决方法:筛选指定日期区间内雇主数量最多的公司

首先得指出你原SQL里的两个核心问题:

  • 没有统计每个公司的雇主数量,根本无法定位“雇主数量最多”的公司
  • 使用top (1) with ties会返回所有具有最大FoundingDate的记录,不符合你“仅取第一个值”的要求,得去掉with ties

针对你的需求,我给出两种实现方式,你可以根据实际场景选择:

方式1:用变量存储起始日期(可读性更高)

这种方式先把唯一的最大FoundingDate存到变量里,再用它筛选区间,逻辑更清晰:

-- 仅取第一个最大的FoundingDate,作为区间起始
DECLARE @StartDate DATE = (SELECT TOP 1 FoundingDate FROM Company ORDER BY FoundingDate DESC);

-- 统计区间内各公司的雇主数量,取数量最多的公司
SELECT TOP 1 WITH TIES -- 若要保留所有并列第一的公司,保留WITH TIES;仅取第一个则去掉
    c.CompanyName
FROM Company c
-- 这里假设雇主信息存在Employee表,通过CompanyID关联统计人数
JOIN Employee e ON c.CompanyID = e.CompanyID
WHERE c.FoundingDate BETWEEN @StartDate AND '2020-11-30'
GROUP BY c.CompanyName
ORDER BY COUNT(e.EmployeeID) DESC;

如果你的Company表本身就有存储雇主数量的字段(比如EmployeeCount),可以简化成:

DECLARE @StartDate DATE = (SELECT TOP 1 FoundingDate FROM Company ORDER BY FoundingDate DESC);

SELECT TOP 1 WITH TIES
    CompanyName
FROM Company
WHERE FoundingDate BETWEEN @StartDate AND '2020-11-30'
ORDER BY EmployeeCount DESC;

方式2:嵌套子查询(无需变量)

如果不想用变量,直接把获取起始日期的子查询嵌入条件里也可以:

SELECT TOP 1 WITH TIES
    c.CompanyName
FROM Company c
JOIN Employee e ON c.CompanyID = e.CompanyID
WHERE c.FoundingDate BETWEEN (SELECT TOP 1 FoundingDate FROM Company ORDER BY FoundingDate DESC) AND '2020-11-30'
GROUP BY c.CompanyName
ORDER BY COUNT(e.EmployeeID) DESC;

关键说明

  • SELECT TOP 1 FoundingDate FROM Company ORDER BY FoundingDate DESC:确保只返回单个最大的FoundingDate,不会因为有重复日期返回多条记录
  • TOP 1 WITH TIES:如果有多个公司的雇主数量并列第一,这个语法会把它们都返回;如果你严格只需要第一个结果,删掉WITH TIES即可
  • 关联Employee表是为了统计每个公司的雇主数量,如果你的数据结构不同,替换成对应的统计逻辑就行

内容的提问来源于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:57:12