0

我正在尝试使用以下方式获取客户的 5 个最新订单时间:

SET SESSION group_concat_max_len = 99;
select o.customer_id, substring_index(m.orders,',', 1) as order1,
    (case when numc >=2 then substring_index(substring_index(m.orders, ',', 2), ',', -1)end) as order2,
    (case when numc >=3 then substring_index(substring_index(m.orders, ',', 3), ',', -1)end) as order3,
    (case when numc >=4 then substring_index(substring_index(m.orders, ',', 4), ',', -1)end) as order4,
    (case when numc >=5 then substring_index(substring_index(m.orders, ',', 5), ',', -1)end) as order5
    from orders o,
         (select group_concat(date order by date desc) as orders, count(*) as numc
          FROM orders) m
where country_id='27' 
group by customer_id

但它正在为所有客户返回我的 sysdate。

我在哪里做错了?

4

1 回答 1

0

我不确定您所说的“所有客户的 sysdate”是什么意思。但是,这join并没有按照您的预期进行。

只需进行一次聚合:

select o.customer_id, substring_index(group_concat(date order by date desc),',', 1) as order1,
    (case when count(*) >=2 then substring_index(substring_index(group_concat(date order by date desc), ',', 2), ',', -1)end) as order2,
    (case when count(*) >=3 then substring_index(substring_index(group_concat(date order by date desc), ',', -1)end) as order3,
    (case when count(*) >=4 then substring_index(substring_index(group_concat(date order by date desc), ',', 4), ',', -1)end) as order4,
    (case when count(*) >=5 then substring_index(substring_index(group_concat(date order by date desc), ',', 5), ',', -1)end) as order5
    from orders o
where country_id='27' 
group by customer_id
于 2013-08-22T12:33:36.497 回答