Php 如何在表中找到最大值,如果有相同的值,则从找到的数据中的最小ID检索数据(mysql 5.5.36)
我有两个表,名称分别为标识和结果。 我想根据具有最大值的rs\u val列检索所有数据,然后按列identifies.idn\u year和identifies.idn\u标签对数据进行分组 如果存在相同的最大值,则显示的数据基于相同数据中最小的rs\u id,但仍显示不同的数据年和标记Php 如何在表中找到最大值,如果有相同的值,则从找到的数据中的最小ID检索数据(mysql 5.5.36),php,mysql,Php,Mysql,我有两个表,名称分别为标识和结果。 我想根据具有最大值的rs\u val列检索所有数据,然后按列identifies.idn\u year和identifies.idn\u标签对数据进行分组 如果存在相同的最大值,则显示的数据基于相同数据中最小的rs\u id,但仍显示不同的数据年和标记 **Table identities** idn_kode | idn_name | idn_year | idn_tag IDN.001 Andi 2017 3 IDN.0
**Table identities**
idn_kode | idn_name | idn_year | idn_tag
IDN.001 Andi 2017 3
IDN.002 sarah 2017 3
IDN.003 Jhon 2017 3
IDN.004 Doe 2018 5
IDN.005 Mark 2018 5
IDN.006 Sisca 2018 5
**Table result**
rs_kode | idn_kode | rs_id | rs_val
RS.001 IDN.002 2 73
RS.002 IDN.004 4 90
RS.003 IDN.005 5 90
RS.004 IDN.006 6 85
RS.005 IDN.003 3 100
RS.006 IDN.001 1 65
我尝试使用此查询
SELECT * FROM (SELECT * FROM result ORDER BY rs_val DESC ) x INNER JOIN identities a on x.idn_kode = a.idn_kode GROUP BY a.idn_yer, a.idn_tag
**the results of the query above**
idn_name | idn_year | idn_tag | id | rs_val
Jhon 2017 3 3 100
Mark 2018 5 5 90
预期结果
idn_name | idn_year | idn_tag | rs_id | rs_val
Doe 2018 5 4 90
Jhon 2017 3 3 100
请问,有人能帮我吗?对于MySql 8.0+,您可以使用
行号()来完成它。
:
请参阅。结果:
对于MySql 5.5,请使用以下查询:
select i.idn_name, i.idn_year, i.idn_tag, min(r.rs_id) rs_id, t.val
from identities i
inner join result r on r.idn_kode = i.idn_kode
inner join (
select i.idn_year, i.idn_tag, max(r.rs_val) val
from identities i inner join result r
on r.idn_kode = i.idn_kode
group by i.idn_year, i.idn_tag
) t on t.idn_year = i.idn_year and t.idn_tag = i.idn_tag and t.val = r.rs_val
group by i.idn_year, i.idn_tag, t.val
要使此代码正常工作,您必须禁用[仅完整组成员][2]
SQL模式。请参阅。
谢谢您的回答。我使用的mysql版本的另一个问题是:5.5.36-mysql社区服务器(GPL):(非常感谢先生的帮助。非常有用。查询就是工作:)
| idn_name | idn_year | idn_tag | rs_id | rs_val |
| -------- | -------- | ------- | ----- | ------ |
| Jhon | 2017 | 3 | 3 | 100 |
| Doe | 2018 | 5 | 4 | 90 |
select i.idn_name, i.idn_year, i.idn_tag, min(r.rs_id) rs_id, t.val
from identities i
inner join result r on r.idn_kode = i.idn_kode
inner join (
select i.idn_year, i.idn_tag, max(r.rs_val) val
from identities i inner join result r
on r.idn_kode = i.idn_kode
group by i.idn_year, i.idn_tag
) t on t.idn_year = i.idn_year and t.idn_tag = i.idn_tag and t.val = r.rs_val
group by i.idn_year, i.idn_tag, t.val