Я пытаюсь получить некоторые данные с заказом по дате, номеру и получить каждый предмет последней цены - PullRequest
0 голосов
/ 01 октября 2019

Извините, я вроде новичка в MySQL. Я хочу упорядочить свои данные по дате, порядковому номеру и получить цену каждого предмета

id | order_number | product_name | order_date | price
 1 | A0919-002    | Bottle       | 2019-09-29 | 20000
 2 | A0919-001    | Bottle       | 2019-09-29 | 10000
 3 | A0819-004    | Bottle       | 2019-08-30 | 40000
 4 | A0819-003    | Bottle       | 2019-08-30 | 30000

, которую я пробовал, но не могу получить ожидаемый результат. и я полагаю, что использование такого подзапроса убьет мою производительность.

Я пытаюсь использовать левое соединение / соединение, но я не могу думать, что мне нужно делать.

SELECT id
     , order_number
     , product_name
     , order_date
     , price
     , IFNULL(
           (SELECT price 
              FROM order_d 
             WHERE order_date <= od1.order_date
               AND product_name = od1.product_name 
               AND id != od1.id 
             ORDER 
                BY order_date DESC
                 , CAST(SUBSTRING(order_number, 7, 3) AS INT) DESC 
             LIMIT 1
            ), '-') LastPrice
  FROM order_d od1
 WHERE order_date <= '2019-09-30' 
 ORDER 
    BY od1.order_date ASC
     , CAST(SUBSTRING(od1.order_number, 7, 3) AS INT) ASC

Я ожидаю

A0819-003 | Bottle | 30000 : Last Price : -
A0819-004 | Bottle | 40000 : Last Price : 30000
A0919-001 | Bottle | 10000 : Last Price : 40000
A0919-002 | Bottle | 20000 : Last Price : 10000

1 Ответ

0 голосов
/ 01 октября 2019

Я не уверен, что ваш ожидаемый результат верен, поскольку идентификатор более важен, чем дата при определении порядка, в котором были получены заказы. Если вы считаете, что ID не важен, вы набиты, так как дата не подходит (имеет дубликаты) для определения порядка событий, а также номер заказа

   SELECT id, order_number, product_name, order_date, price,
            IFNULL((SELECT price 
                        FROM t 
                        WHERE id > od1.id
                        AND product_name = od1.product_name 
                        ORDER BY id asc, 
                        CAST(SUBSTRING(order_number, 7, 3) AS INT) DESC LIMIT 1), '-') LastPrice
FROM t od1
WHERE order_date <= '2019-09-30' 
ORDER BY od1.id desc, CAST(SUBSTRING(od1.order_number, 7, 3) AS INT) ASC

+------+--------------+--------------+------------+-------+-----------+
| id   | order_number | product_name | order_date | price | LastPrice |
+------+--------------+--------------+------------+-------+-----------+
|    4 | A0819-003    | Bottle       | 2019-08-30 | 30000 | -         |
|    3 | A0819-004    | Bottle       | 2019-08-30 | 40000 | 30000     |
|    2 | A0919-001    | Bottle       | 2019-09-29 | 10000 | 40000     |
|    1 | A0919-002    | Bottle       | 2019-09-29 | 20000 | 10000     |
+------+--------------+--------------+------------+-------+-----------+
4 rows in set (0.00 sec)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...