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

SQL新手求助:查询2015年5月最后一笔销售的ID(原查询报错)

解决2015年5月最后一笔销售的人员ID查询问题

问题根源

你遇到的Sales_Date列不存在错误,核心原因有两个:

  1. SQL执行顺序是FROM → WHERE → SELECT,WHERE子句无法使用SELECT中定义的别名(比如year、month、Sales_Date),此时这些别名还未生成。
  2. 你定义的别名是Sales_Date(首字母大写),但extract里写的是sales_date(全小写),部分数据库对大小写敏感,会识别为不同列。

另外,CONCAT(' ', CAST(occurred_at AS DATE))多了多余空格,直接用CAST(occurred_at AS DATE)就能得到日期部分,没必要拼接空格。

正确查询语句

要获取2015年5月最后一笔销售的人员ID,最优写法是直接通过occurred_at筛选日期范围,再按时间降序取第一条记录:

SELECT ID
FROM <table name>
WHERE occurred_at >= '2015-05-01' 
  AND occurred_at < '2015-06-01'
ORDER BY occurred_at DESC
LIMIT 1;

适配不同数据库的写法

如果你的数据库不支持LIMIT,可以对应调整:

  • SQL Server用TOP 1:
SELECT TOP 1 ID
FROM <table name>
WHERE occurred_at >= '2015-05-01' 
  AND occurred_at < '2015-06-01'
ORDER BY occurred_at DESC;
  • Oracle用ROWNUM:
SELECT ID
FROM (
    SELECT ID
    FROM <table name>
    WHERE occurred_at >= '2015-05-01' 
      AND occurred_at < '2015-06-01'
    ORDER BY occurred_at DESC
)
WHERE ROWNUM = 1;

额外说明

用日期范围筛选(>= '2015-05-01' AND < '2015-06-01')比extract函数更高效,因为数据库可以利用occurred_at列上的索引(如果存在的话),避免全表扫描。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.21 22:12:24