如何在分组多列时选择最大值或最后一条记录?

时间:2017-03-10 14:10:12

标签: mysql sql select group-by max

这是我几个小时以来一直在思考的问题,仍然无法得到答案。

假设我有这个表:table

+---------------------------------------------+
+     date    |  id   | Country | Impressions +
+---------------------------------------------+
+  2017-03-08 |   1   | US      |    374      +
+  2017-03-09 |   1   | US      |    521      +
+  2017-03-10 |   1   | US      |    708      +
+  2017-03-08 |   2   | US      |    100      +
+  2017-03-09 |   2   | US      |    200      +
+---------------------------------------------+

我想按ID和国家/地区对结果进行分组,但是在最后一天获得展示次数(日期或最后一次记录的最大值)

我有这个查询

SELECT * from table group by id,country

但它给了我这个输出

+---------------------------------------------+
+     date    |  id   | Country | Impressions +
+---------------------------------------------+
+  2017-03-08 |   1   | US      |    374      +
+  2017-03-08 |   2   | US      |    100      +
+---------------------------------------------+

如您所见,日期是第一张唱片。

我想要一个给我输出的查询

+---------------------------------------------+
+     date    |  id   | Country | Impressions +
+---------------------------------------------+
+  2017-03-10 |   1   | US      |    708      +
+  2017-03-09 |   2   | US      |    200      +
+---------------------------------------------+

如您所见,输出具有最新值或最后插入的记录

我希望你们可以帮我解决这个问题,我在最后几个小时里一直在烧我的脑袋而未能完成这件事。

非常感谢你。

2 个答案:

答案 0 :(得分:2)

获取每个ID,国家/地区的最长日期,并将此结果与原始表格结合使用。

T

答案 1 :(得分:1)

问题是你在考虑“群体”而不是“过滤”。您不希望聚合任何列,因此您确实希望过滤行。

以下是一种过滤方法:

select t.*
from t
where t.date = (select max(t2.date)
                from t t2
                where t2.country = t.country and t2.id = t.id
               );