描述: 我们现在来求在每个产品下面的最近的日期
如果我们按照平时的理解:
select
product_id,order_date
from
Orders
group by
product_id
order by
order_date desc
但是我们会发现会输出下面的值,不是我们想要的。
{"headers": ["product_id", "order_date"], "values": [[3, "2020-08-29"], [1, "2020-07-31"], [2, "2020-07-30"]]
这是因为group by 和order by 一起使用时,会先使用group by分组,并取出分组后的第一条数据,所以后面的order by 排序时根据取出来的第一条数据排序的
但是第一条数据不一定是分组里面的最大数据。
那么如何解决呢?
(1) 聚合函数+子查询
select
product_id,
max(order_date)
from
Orders
group by
product_id
如果想要这个整行的数据只需要再来一个in子查询即可。
(2) 先排序后分组
select
t1.*
from
(
select
order_id ,
order_date ,
customer_id ,
product_id
from
Orders
order by
order_date
desc
limit 10000000000
) t1
group by t1.product_id