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

SQL Server查询covidDeaths表美国最新日期疫情数据出错求助

错误原因分析

你写的SQL语句不符合需求,核心问题出在GROUP BY的使用逻辑上:

  • GROUP BY total_cases, total_deaths的作用是把所有total_cases和total_deaths组合相同的行划分为同一个分组,再对每个分组单独计算MAX(date)
  • 你给出的样例数据中,每一行的total_cases+total_deaths组合都是唯一的,所以最终每个分组对应1行原始数据,计算出来的MAX(date)就是该行自身的日期,自然会返回所有符合location条件的行,而非你期望的唯一最新行。

简单来说,你的写法是在统计「每一种确诊+死亡数组合对应的最晚出现日期」,而不是「找整张表日期最大的那一行的数值」,逻辑完全不匹配。

正确实现方案(适配SQL Server 2019)

给你两种常用的写法:

方案1:单地区查询直接用TOP 1

只查美国单地的最新数据时,直接排序后取第一条即可,写法最简洁:

SELECT TOP 1
    date AS [Current Date],
    total_cases,
    total_deaths
FROM covidDeaths
WHERE location = 'United States'
ORDER BY date DESC;

方案2:多地区查询用窗口函数

如果后续需要扩展为同时查询多个国家的最新数据,用ROW_NUMBER窗口函数更灵活:

WITH ranked_data AS (
    SELECT 
        date AS [Current Date],
        total_cases,
        total_deaths,
        -- 按地区分组,日期从新到旧排序编号
        ROW_NUMBER() OVER (PARTITION BY location ORDER BY date DESC) AS rn
    FROM covidDeaths
    WHERE location = 'United States' -- 要查多个地区的话删掉这个条件即可
)
SELECT [Current Date], total_cases, total_deaths
FROM ranked_data
WHERE rn = 1; -- 取每个地区排序第一的最新数据

内容的提问来源于stack exchange,提问作者Eduardo Gamboa-Cruz

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.26 10:36:08