SELECT query return 1 row from each group(SELECT 查询从每组返回 1 行)
问题描述
这是一个产品表,有几百万条记录.
This is a product table and have few million of records.
我想列出如下记录:
通常我使用:
I want to list record as below:
Normally I use:
SELECT id,
product_name,
store_id
FROM product
GROUP BY store_id
ORDER BY id.
目前有 SQL 性能问题.我需要 SQL 查询来输出这样的结果.
Currently having SQL performance issue. I need SQL query to output result like this.
推荐答案
有很多替代方案可以解决这个问题,我推荐的一个是加入一个单独获取最新 ID (假设对于每个 store_ID,该列都是 AUTO_INCREMENTed).
There are many alternatives to solves this, one which I recommend is to have joined a subquery which separately gets the latest ID (assuming that the column is AUTO_INCREMENTed) for each store_ID.
SELECT a.*
FROM tableName a
INNER JOIN
(
SELECT store_ID, MAX(ID) max_ID
FROM tableName
GROUP BY store_ID
) b ON a.store_ID = b.store_ID AND
a.ID = b.max_ID
- SQLFiddle 演示
为了获得更好的性能,请确保在这些列上有一个索引:ID 和 store_id.
for better performance, be sure to have an index on these columns: ID and store_id.
更新 1
如果你想对每条记录设置限制,请在下面使用,
if you want to have limit for every records, use this below,
SELECT ID, product_Name, store_ID
FROM tableName a
WHERE
(
SELECT COUNT(*)
FROM tableName b
WHERE b.store_ID = a.store_ID AND b.ID >= a.ID
) <= 2;
- SQLFiddle 演示
这篇关于SELECT 查询从每组返回 1 行的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持编程学习网!
本文标题为:SELECT 查询从每组返回 1 行
基础教程推荐
- 是否可以执行按位分组功能? 2021-01-01
- 在 SQL 中连接多个表 2021-01-01
- 如何使用 mysql.connector 禁用查询缓存 2022-01-01
- SQL 效率:WHERE IN 子查询 vs. JOIN 然后 GROUP 2021-01-01
- 无法解决整理冲突 2021-01-01
- SSMS 中的权限问题:“对象 'extended_properties'、数据库 'mssqlsystem_resource'、... 错误 229)上的 SELECT 权限被拒绝" 2022-01-01
- SQL Server 实例在登录协商期间返回无效或不受支持的协议版本 2021-01-01
- 需要 MySQL 5.1 中的抽象触发器来更新审计日志 2021-01-01
- SQL:使用来自具有相同列名的两个表中的数据... 2021-01-01
- 将 SQL Server DateTime 列迁移到 DateTimeOffset 2021-01-01
