Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/mysql/57.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php 如何在表中找到最大值,如果有相同的值,则从找到的数据中的最小ID检索数据(mysql 5.5.36)_Php_Mysql - Fatal编程技术网

Php 如何在表中找到最大值,如果有相同的值,则从找到的数据中的最小ID检索数据(mysql 5.5.36)

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

我有两个表,名称分别为标识结果。 我想根据具有最大值的rs\u val列检索所有数据,然后按列identifies.idn\u yearidentifies.idn\u标签对数据进行分组

如果存在相同的最大值,则显示的数据基于相同数据中最小的rs\u id,但仍显示不同的数据年和标记

**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