这是我几个小时以来一直在思考的问题,仍然无法得到答案。
假设我有这个表: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 +
+---------------------------------------------+
如您所见,输出具有最新值或最后插入的记录
我希望你们可以帮我解决这个问题,我在最后几个小时里一直在烧我的脑袋而未能完成这件事。
非常感谢你。
答案 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
);