从表中的分组记录中选择除最后记录以外的所有记录

我试图从表中选择除最后一行以外的所有分组数据。

+----+--------+--------+                    +----+--------+--------+
| id | userID | amount |                    | id | userID | amount |
+----+--------+--------+                    +----+--------+--------+
| 1  | 20     | 400    |                    | 1  | 20     | 400    |
+----+--------+--------+                    +----+--------+--------+
| 2  | 20     | 200    |                    | 2  | 20     | 200    |
+----+--------+--------+          =>        +----+--------+--------+
| 3  | 21     | 100    |                    | 3  | 21     | 100    |
+----+--------+--------+                    +----+--------+--------+
| 4  | 11     | 500    |                    | 4  | 11     | 500    |
+----+--------+--------+                    +----+--------+--------+
| 5  | 11     | 250    |                    | 6  | 21     | 50     |
+----+--------+--------+                    +----+--------+--------+
| 6  | 21     | 50     |                    
+----+--------+--------+
| 7  | 20     | 100    |                    
+----+--------+--------+
| 8  | 21     | 200    |
+----+--------+--------+

我试着用这个查询

SELECT * FROM table WHERE userID != (SELECT MAX(userID) FROM table) GROUP BY userID

但它只获取一排唯一的数据 , 即使还有更多的剩余


EN From: select all but the last record from grouped record in a table

8 Comments

  1. 2. 你没有必要进行分组讨论

    SELECT * 
    FROM table 
    WHERE userID != ( 
      SELECT MAX(userID) FROM table
    ) 
    

    对于 mysql 版本>5.7(默认设置),可以使用mysql版本<5.7来实现这一点

    1. 从您的示例看 , 您似乎在寻找每个用户 id 的所有行 , 但没有寻找数量最低的行 ( 而不是最后一个用户 id 中不同的行 ) 。
  2. 如果您做了 SELECT* 和 GROUE by userID , 您将会得到一个错误 , 即不是所有列都是按组或聚合的。
  3. 你们为什么要分组 ? 外部查询中没有聚合函数。 使用聚合无论如何是错误的 , 除非表只有一个列。
  4. 见 https://meta.stackoverflow.com/questions/333952/why-should-i-provide-a-minimal-reproducible-example-for-a-very-simple-sql-query

More articles:

  • SQL : 按名称字段选择记录和所有地址相同的记录
  • 如何选择添加的最后 10 个记录 ?
  • 选择在不到一个月前和一个多月前添加 X值的所有记录
  • 优化子查询选择每个组的最后记录
  • MySQL - 选择所有记录 , 但关系表中已关联的记录除外
  • SQL Rand 查询选择所有记录 , 不使用联合表
  • PHP MySQL 查询 - 选择所有用户 , 但只显示每个用户最早的登录时间
  • 从所有匹配的行中选择索引 / id 最高的行
  • 如何在对记录进行编号时选择使用 MySQL 的多个行?
  • MySQL 查询没有正确显示所有记录
  • 如何分组从表中选择
  • 使用 cakephp 选择不在另一个表中的所有行
  • MySQL - 选择俱乐部名称并在一个查询中列出所有成员?
  • MySQL 查询选择所有日期等于今天的数据时间
  • 选择嵌套树菜单中未排序列表的所有最后元素. 而不仅仅是 : 最后一个子元素
  • 删除除给定列表中的行号以外的所有其他行
  • 选择与标准匹配的行之后的所有行
  • 删除外键时删除所有记录
  • 没有分组的 MySQL 选择列
  • MySQL - 获取所有具有相同 id 1 个以上记录的记录
  • 获得最新记录 , 然后按字母顺序分组
  • 空记录分组
  • 在一个查询中选择"输入一个主记录及其所有相关的外部详细记录"?
  • RAS3 动态记录从单表选择父子级递归
  • 选择添加数字的记录
  • MySQL 选择联接和分组
  • 如何在特定日期参数之间选择第一和最后记录 ?
  • MySQL 选择产品的所有组件
  • CSS 选择除元素和类中的子元素以外的所有元素
  • 返回记录的最后一天, 当不是每天在 N 有记录?