如何显示具有相应的其他列最大值的唯一行

时间:2017-10-31 14:21:10

标签: php mysql

我正在尝试通过对其他列进行分组来获取最大列值。我几乎要靠近,但最后一点陷入困境。这是我的代码

TABLE:

      id . sys_id        . renewal
      1  . aaad00101     . 0
      2  . aaad00101     . 1
      3  . aaad00104     . 0
      4  . aaad00102     . 0
      5  . aaad00101     . 2
      6  . aaad00103     . 0

SQL查询:

     "SELECT * FROM $company WHERE renewal IN (SELECT DISTINCT
      MAX(renewal)FROM $company GROUP BY sys_id) ORDER BY sys_id"

结果:

     aaad00101-0
     aaad00101-2
     aaad00102-0
     aaad00103-0
     aaad00404-0 

我的代码显示最小值的最大值,如前两个结果。但我想如果显示最大值,那么它不应该在结果中显示最小值。

让我知道我在这里失踪了什么。 感谢

修正:

SQL查询:

   "SELECT * FROM $company WHERE id IN (SELECT DISTINCT MAX(id)FROM
    $company GROUP BY sys_id) ORDER BY sys_id";

1 个答案:

答案 0 :(得分:0)

我是否更正您希望保留表中当前所有的行,并附加一列,显示每个sys_id的最大续订值?

这是经常在窗口函数中完成的事情,但由于MySQL目前没有这种功能,你可以通过额外的连接绕过它。

选择a。*,        b.last_renewal 来自公司AS      JOIN(SELECT sys_id,                    MAX(续订)AS last_renewal             来自公司             GROUP BY sys_id)AS b USING(sys_id);

或者您正在寻找最新事件的续订值,我假设它是id列的最大值?

如果是这种情况,您可以将所有续订值连接到一个列表中并按ID排序该列表,然后您可以取出该列表中的最后一个值。

SELECT sys_id,        SUBSTRING_INDEX(GROUP_CONCAT(续订ORDER BY id),',', - 1)AS last_renewal,        MAX(id)AS last_occurance 来自公司 GROUP BY sys_id;