как найти следующий идентификатор заказа mysql - PullRequest
0 голосов
/ 14 мая 2018

Пример ввода

order_id Customer_id Order_date    
1          1         2017-11-01    
2          2         2017-11-02    
3          1         2017-11-03    
4          2         2017-11-04

Желаемый вывод

order_id next_order_id

1              3    
2              4    
3    
4

Ответы [ 3 ]

0 голосов
/ 14 мая 2018

Вы также можете subquery:

SELECT order_id, 
       (select order_id 
        from table 
        where Customer_id = t.Customer_id and 
              Order_date > t.Order_date
        order by Order_date 
        LIMIT 1) as next_order_id
FROM table t
ORDER BY order_id;
0 голосов
/ 14 мая 2018

Каноническим способом в MySQL будет коррелированный подзапрос:

select t.*,
       (select t2.order_id
        from t t2
        where t2.customer_id = t.customer_id and t2.order_date > t.order_date
        order by t2.order_date desc
        limit 1
       ) as next_order_id
from t;

Если вы используете MySQL 8.0, тогда лучше выбрать lead().

0 голосов
/ 14 мая 2018

Вы можете использовать LEAD:

SELECT order_id,
 LEAD(order_id) OVER(PARTITION BY Customer_id ORDER BY Order_date) AS next_order
FROM tab
ORDER BY order_id;

Демонстрация DBFiddle - MySQL 8.0


Для предыдущей версии MySQL:

SELECT order_id,
     (SELECT order_id 
     FROM tab t2 
     WHERE t1.customer_id = t2.customer_id 
       and t2.Order_date > t1.order_date 
     ORDER BY Order_date LIMIT 1 ) AS next_order
FROM tab t1
ORDER BY order_id;

DBFiddle Demo2

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...