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

如何从itemlocation表中获取首个地址分组的全部数据?

解决方案

方法一:通用SQL(适配多数数据库)

先找到表中最小的date值,再关联原表取出该日期对应的所有记录:

SELECT il.*
FROM itemlocation il
WHERE il.date = (SELECT MIN(date) FROM itemlocation);

这个方法逻辑简单,适配MySQL、Oracle、PostgreSQL等多数数据库,刚好匹配你要取出最早日期分组下所有条目的需求。

方法二:窗口函数(支持窗口函数的数据库:MySQL8+、Oracle、PostgreSQL等)

用DENSE_RANK()给不同的date分组排名,再筛选出排名为1的所有记录:

SELECT item, address, date
FROM (
    SELECT 
        item, address, date,
        DENSE_RANK() OVER (ORDER BY date) AS date_rank
    FROM itemlocation
) t
WHERE date_rank = 1;

这里用DENSE_RANK是因为如果存在多个相同的最小日期,它们的排名都会是1,能确保所有对应记录都被取出;如果用ROW_NUMBER(),会给每个记录单独编号,只能拿到单条结果,不符合需求。

你的原SQL问题说明

你写的SQL存在两个明显问题:

  1. group by address会强制聚合每个address的记录,只能返回每个地址的单条结果,不符合你要取分组内所有条目的需求;
  2. 子查询里没有定义group_number字段,外层的where group_number <=1会触发语法错误。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.17 15:15:46