【问题标题】:How to get first or any 3 rows of all unique IDs?如何获取所有唯一 ID 的第一行或任意 3 行?
【发布时间】:2020-04-09 06:53:27
【问题描述】:

样本表

╔════╤═══════╗
║ id │ value ║
╠════╪═══════╣
║ 1  │ a     ║
╟────┼───────╢
║ 1  │ b     ║
╟────┼───────╢
║ 1  │ c     ║
╟────┼───────╢
║ 1  │ d     ║
╟────┼───────╢
║ 2  │ e     ║
╟────┼───────╢
║ 2  │ f     ║
╟────┼───────╢

预期输出

╔════╤═══════╗
║ id │ value ║
╠════╪═══════╣
║ 1  │ a     ║
╟────┼───────╢
║ 1  │ b     ║
╟────┼───────╢
║ 1  │ c     ║
╟────┼───────╢
║ 2  │ e     ║
╟────┼───────╢
║ 2  │ f     ║
╟────┼───────╢

类似的东西。如果值少于 3 个,仍会获取该特定 ID 的任何行。
我尝试使用嵌套选择和限制,但没有奏效。
MYSQL 5.7

谢谢

【问题讨论】:

  • 我删除了“Windows”标签,因为您的问题不是特定于 Windows 的。

标签: mysql-5.7


【解决方案1】:

如果您使用的是 MySQL 8+,那么ROW_NUMBER 可以在这里工作:

WITH cte AS (
    SELECT id, value, ROW_NUMBER() OVER (PARTITION BY id ORDER BY value) rn
    FROM yourTable
)

SELECT id, value
FROM cte
WHERE rn <= 3
ORDER BY id, value;

Demo

【讨论】:

  • 您好,感谢您的快速回复!但我使用的是 MySQL 5.7:/
  • 这个查询在 MySQL 5.7 中很难处理。如果可以的话,你应该升级。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-09-04
  • 1970-01-01
  • 1970-01-01
  • 2011-08-10
相关资源
最近更新 更多