从表中删除重复行后,从查询结果中返回唯一列表

时间:2018-03-08 19:01:05

标签: mysql arraylist

我有两列product_idr_store_id,其中有几行具有相同的值。其余列行具有不同的值 我有相同的r_store_idproduct_id的重复行,因为每次我必须在此表中添加新条目。我想要带有最新update_dt的唯一行列表 (参见下面的DB表)。

id | m_store_id |r_store_id|product_id | amount |update_dt |
1  |         4  |       1  |       45  | 10     |18/03/5   |
2  |         4  |       1  |       45  | 100    |18/03/9   |
3  |         4  |       1  |       45  | 20     |18/03/4   |
4  |         5  |       2  |       49  | 10     |18/03/8   |
5  |         5  |       2  |       49  | 60     |18/03/2   |
6  |         9  |       3  |       45  | 19     |18/03/5   |
7  |         9  |       3  |       45  | 56     |18/03/3   |

我的结果应如下所示:

id | m_store_id |r_store_id|product_id | amount |update_dt |
2  |         7  |       1  |       45  | 100    |18/03/9   |
4  |         5  |       2  |       49  | 10     |18/03/8   |
6  |         9  |       3  |       45  | 19     |18/03/5   |

我想把这个结果放在这样的列表中:

List<Sales> salesList = (List<Sales>) query.list();

我无法找到一个简单的解决方案。请帮帮我!

1 个答案:

答案 0 :(得分:1)

我们可以为每个商店选择按时间顺序排列的最新更新,然后加入以获取所有变量:

select a.*
from mytable a
join (select m_store_id, r_store_id, product_id, max(update_dt) as maxdate
      from mytable
      group by 1,2,3) b
on a.m_store_id=b.m_store_id
and a.r_store_id=b.r_store_id
and a.product_id=b.product_id
and a.update_dt = b.maxdate;