mysql 创建多个选择以将 max 放入所有行

标签 mysql

这是我的带有示例数据的表格:

Table:PersTrans
+------------+-------------+------+-----+------------+-------+
| Field      | Type        | Null | Key | Default    | Extra |
+------------+-------------+------+-----+------------+-------+
| PersTrID   | char(10)    | NO   | PRI |            |       |
| PersTrSeq  | int(11)     | NO   | PRI | 0          |       |
| PersTrDate | date        | YES  |     | 1001-01-01 |       |
| PersTrPaid | float(9,2)  | YES  |     | 0.00       |       |
+------------+-------------+------+-----+------------+-------+

mysql> select * from PersTrans;
+------------+-----------+-----------+-------------+
| PersTrID   | PersTrSeq | PersTrDate | PersTrPaid |
+------------+-----------+-----------+-------------+
| MOCK       |         1 | 2015-10-10 |     400.00 | 
| MOCK       |         2 | 2017-11-07 |      10.00 | 
| NAGA       |         1 | 2015-11-11 |     500.00 | 
| NASSA      |         1 | 2015-12-16 |     800.00 |
+------------+-----------+-----------+-------------+

我想选取最大的 PersTrSeq,并将其附加到具有相同 PersTrId 的所有记录。我想要什么:

+------------+-----------+------------+------------+----------------+
| PersTrID   | PersTrSeq | PersTrDate | PersTrPaid | max(PersTrSeq) |
+------------+-----------+-----------+------------+-----------------+
| MOCK       |         1 | 2015-10-10 |     400.00 |              2 |
| MOCK       |         2 | 2017-11-07 |      10.00 |              2 |
| NAGA       |         1 | 2015-11-11 |     500.00 |              1 | 
| NASSA      |         1 | 2015-12-16 |     800.00 |              1 | 
+------------+-----------+-----------+------------+-----------------+

这两次尝试都没有成功。我寻找了其他建议,但没有发现任何有用的东西。

mysql> SELECT *, max(PersTrSeq) from PersTrans where PersTransId = 'Mock' group by PersTrSeq;
+------------+-----------+------------+------------+----------------+
| PersTrID   | PersTrSeq | PersTrDate | PersTrPaid | max(PersTrSeq) |
+------------+-----------+-----------+------------+-----------------+
| MOCk       |         1 | 2015-10-10 |     400.00 |              1 |
| MOCK       |         2 | 2017-11-07 |      10.00 |              2 |
+------------+-----------+-----------+------------+-----------------+

mysql> SELECT *, max(PersTrSeq) as maxseq from PersTrans group by PersTrId;
+------------+-----------+------------+------------+--------+
| PersTrID   | PersTrSeq | PersTrDate | PersTrPaid | maxseq |
+------------+------------+-----------+------------+--------+
| MOCK       |         1 | 2015-10-10 |     400.00 |      2 |
| NAGA       |         1 | 2015-11-11 |     500.00 |      1 |
| NASSA      |         1 | 2015-12-16 |     800.00 |      1 |
+------------+-----------+-----------+------------+---------+

任何人都可以提供一个查询来获得我正在寻找的结果吗?

最佳答案

以下查询将起作用:

select *,
       (select max(PersTrSeq) from PersTrans p2
        where p2.PersTrId = p1.PersTrId
       ) as maxSeq
from PersTrans p1;

关于mysql 创建多个选择以将 max 放入所有行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47241727/

相关文章:

MYSQL 如何仅从一个表中选择数据,其中该表中的列值与另一表中的列值匹配?

mysql - 仅选择第二个表中不存在的记录

python - Django: AttributeError: 'Employee' 对象没有属性 'current_hours'

php - 多个 mysql 连接和正确的显示顺序

MySql 十进制数据类型 : not Inserting Proper Value

mysql - 如何从以逗号分隔值存储的 MySQL 中选择当前周工作日期

php - 如何制作 js 小部件/弹出窗口/内容储物柜?

php - 如何避免以明文形式存储我需要访问的用户密码?

MySQL 复制 INSERT...SELECT 和 ORDER BY

javascript - 使用提交按钮上的 javascript 更新 php 中的 SQL 语句