Domanda

I am trying to get 5 latest order timings of customers using:

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

But it is returning me sysdate for all customers.

Where am i doing it wrong?

È stato utile?

Soluzione

I'm not sure what you mean by "sysdate for all customers". But, the join is not doing what you expect.

Just do the aggregation once:

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
Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top