Php 在列上使用GROUPBY和max删除重复值仅获取最大id值

Php 在列上使用GROUPBY和max删除重复值仅获取最大id值,php,mysql,Php,Mysql,我有一个使用group by和max on列的表'group\U get\U max',我想删除重复值只是获取最大id值,我该怎么做 这是我的桌子 SELECT * FROM for_test.group_get_max; 输出 +----+--------------+----------+-------+------+----------+-------------+ | Id | warehouse_id | goods_id | price | inc | quantity | op

我有一个使用group by和max on列的表'group\U get\U max',我想删除重复值只是获取最大id值,我该怎么做

这是我的桌子

SELECT * FROM for_test.group_get_max;
输出

+----+--------------+----------+-------+------+----------+-------------+
| Id | warehouse_id | goods_id | price | inc  | quantity | operated_at |
+----+--------------+----------+-------+------+----------+-------------+
|  1 |            1 |        2 |   100 |   50 |       50 | 2020-03-21  |
|  2 |            1 |        2 |   100 |   50 |      150 | 2020-03-22  |
|  3 |            1 |        2 |   100 |   50 |      100 | 2020-03-21  |
|  4 |            1 |        2 |   100 |   50 |      150 | 2020-03-23  |
|  5 |            1 |        2 |   100 |   50 |      200 | 2020-03-23  |
|  6 |            1 |        3 |   100 |  100 |      100 | 2020-03-21  |
|  7 |            1 |        3 |   100 |   50 |      150 | 2020-03-22  |
|  8 |            1 |        3 |   100 |   50 |      200 | 2020-03-22  |
|  9 |            1 |        3 |   100 |   50 |      200 | 2020-03-23  |
| 10 |            1 |        3 |   100 |   50 |      250 | 2020-03-23  |
| 11 |            1 |        3 |   100 |   50 |      250 | 2020-03-21  |
| 12 |            1 |        2 |   100 |   50 |      200 | 2020-03-22  |
+----+--------------+----------+-------+------+----------+-------------+
以下是使用GROUP BY和MAX列的查询−

SELECT 
    group_get_max.goods_id, group_get_max.warehouse_id,
    group_get_max.quantity,group_get_max.operated_at,group_get_max.id
FROM
    group_get_max
        INNER JOIN
    (SELECT 
        group_get_max.warehouse_id,
            group_get_max.goods_id,
            MAX(group_get_max.operated_at) AS operated_at
    FROM
        group_get_max
    WHERE
        group_get_max.operated_at <  '2020-03-23'
            AND group_get_max.warehouse_id IN ('1' , '2', '3')
    GROUP BY group_get_max.goods_id , group_get_max.warehouse_id) AS q 
       ON group_get_max.operated_at = q.operated_at
        AND q.warehouse_id = group_get_max.warehouse_id
        AND q.goods_id = group_get_max.goods_id
WHERE
    group_get_max.warehouse_id IN ('1', '2','3')
但我只想在分组后获得最大id。

+----------+--------------+----------+-------------+----+
| goods_id | warehouse_id | quantity | operated_at | id |
+----------+--------------+----------+-------------+----+
|        3 |            1 |      200 | 2020-03-22  |  8 |
|        2 |            1 |      200 | 2020-03-22  | 12 |
+----------+--------------+----------+-------------+----+

我该怎么办?我正在联机等待

WHERE
子句中使用相关子查询,而不是连接:

SELECT g.* FROM group_get_max AS g
WHERE g.operated_at < '2020-03-23' AND g.warehouse_id IN ('1' , '2', '3')
AND g.Id = (
  SELECT Id FROM group_get_max
  WHERE warehouse_id = g.warehouse_id AND goods_id = g.goods_id
  AND operated_at < '2020-03-23' AND warehouse_id IN ('1' , '2', '3')
  ORDER BY operated_at DESC, quantity DESC 
  LIMIT 1
)
请参阅。
结果:


我想您最好使用排序和限制来查找最新日期。@KIKOSoftware您能给我一个例子吗?
从组中选择operated\u at\u get\u max ORDER BY operated\u at limit 1
。谢谢您的帮助,我会尝试一下。
SELECT g.* FROM group_get_max AS g
WHERE g.operated_at < '2020-03-23' AND g.warehouse_id IN ('1' , '2', '3')
AND g.Id = (
  SELECT Id FROM group_get_max
  WHERE warehouse_id = g.warehouse_id AND goods_id = g.goods_id
  AND operated_at < '2020-03-23' AND warehouse_id IN ('1' , '2', '3')
  ORDER BY operated_at DESC, quantity DESC 
  LIMIT 1
)
SELECT 
  t.Id, t.warehouse_id, t.goods_id, 
  t.price, t.inc, t.quantity, t.operated_at
FROM (  
  SELECT *, 
    row_number() over (partition by warehouse_id, goods_id order by operated_at DESC, quantity DESC) rn
  FROM group_get_max
  WHERE operated_at < '2020-03-23' AND warehouse_id IN ('1' , '2', '3')
) AS t
WHERE t.rn = 1
| Id  | warehouse_id | goods_id | price | inc | quantity | operated_at  |
| --- | ------------ | -------- | ----- | --- | -------- | ------------ |
| 8   | 1            | 3        | 100   | 50  | 200      | 2020-03-22   |
| 12  | 1            | 2        | 100   | 50  | 200      | 2020-03-22   |