Php 在列上使用GROUPBY和max删除重复值仅获取最大id值
我有一个使用group by和max on列的表'group\U get\U 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
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 |