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

如何获取表中N个不同资产的全量重复行数据?LIMIT/GROUP BY无效

可行的解决方案

我来给你几个实用的方案,完美解决你要获取20个不同资产全量行的需求,避开直接用LIMIT截断行、GROUP BY聚合数据的问题:

1. 子查询关联法(兼容性最强)

先通过子查询筛选出20个唯一的资产名称,再关联原表拿到这些资产的所有行数据,这种写法几乎适配所有主流数据库:

SELECT t.Name, t.SomeData, t.MoreStuff
FROM your_table t
INNER JOIN (
    -- 这里先取20个不同的资产,可根据需求调整排序规则(比如按创建时间、资产ID等)
    SELECT DISTINCT Name
    FROM your_table
    ORDER BY Name
    LIMIT 20
) AS top_assets ON t.Name = top_assets.Name;

2. CTE+窗口函数法(可读性更高)

如果你的数据库支持CTE(公共表表达式)和窗口函数(比如MySQL 8.0+、PostgreSQL、SQL Server等),这种写法逻辑更清晰:

WITH ranked_assets AS (
    -- 给每个唯一资产分配一个排名,取前20个
    SELECT DISTINCT Name,
           ROW_NUMBER() OVER (ORDER BY Name) AS asset_rank
    FROM your_table
)
SELECT t.Name, t.SomeData, t.MoreStuff
FROM your_table t
JOIN ranked_assets ra ON t.Name = ra.Name
WHERE ra.asset_rank <= 20;

3. IN子句嵌套法(写法简洁)

用IN子句指定目标资产集合,不过注意部分数据库(比如MySQL)需要嵌套一层子查询来规避语法限制:

SELECT Name, SomeData, MoreStuff
FROM your_table
WHERE Name IN (
    SELECT Name FROM (
        SELECT DISTINCT Name
        FROM your_table
        ORDER BY Name
        LIMIT 20
    ) AS temp_table
);

注意事项

  • 所有方案里的ORDER BY Name可以根据你的实际需求调整,比如换成ORDER BY create_time DESC来取最新的20个资产;
  • 如果不需要特定顺序,也可以去掉ORDER BY,但不同数据库可能会返回随机的20个资产,这点要留意。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.28 07:21:08