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
相关产品推荐
相关产品推荐

