mySQL - запрос для извлечения первых 2 записей с уникальными значениями для определенного столбца - PullRequest
0 голосов
/ 07 февраля 2019

У меня есть приложение, которое записывает и обрабатывает заказы на продукцию.С момента первоначального создания заказа до его окончательной отправки на исполнение 1 или более его свойств могут быть изменены 1 или более раз одним или несколькими сотрудниками на этом пути.Я храню номера заказов и сотрудников, которые начали заказы в 1 таблице, а затем все изменения всех заказов (включая начальные данные) в другой таблице.Примерно так:

Заказы

ORDER_ID   EMPLOYEE
1          dan
2          dan
3          fred

Order_Activity

ACTIVITY_ID    ORDER_ID    UPDATER    DATE      QTY    SIZE    COLOR    STATUS
1               1          dan        1/1/2017  5      m       red      new
2               1          dan        1/3/2017  15     m       red      updated
3               1          tom        1/9/2017  15     l       red      submitted
4               2          dan        1/1/2017  25     l       blue     new
5               2          tom        1/1/2017  25     l       blue     submitted
6               3          fred       1/9/2017  15     s       red      new
7               3          fred       1/10/2017 5      l       red      updated
8               3          fred       1/11/2017 5      m        red     updated
9               3          tom        1/11/2017 5      m        red     submitted

Мне нужно отобразить 2 самых последнихзаказы с сотрудником, который инициировал заказ, а также свойства заказов (кол-во, размер и цвет), какими они были при изменении статуса на «отправлено».

Если мне нужно только ONE порядок (самый последний), я думаю, я мог бы использовать:

SELECT 
    Orders.EMPLOYEE, 
    Order_Activity.QTY, 
    Order_Activity.SIZE,
    Order_Activity.COLOR FROM Orders 
        INNER JOIN Order_Activity 
            ON Orders.ORDER_ID = Order_Activity.ORDER_ID 
            ORDER BY Order_Activity.date DESC LIMIT 1

Однако мне трудно представить, как найти следующую запись с другим значением для ORDER_ID, сохраняя все этов одном запросе.

Может ли кто-нибудь помочь мне с запросом, чтобы получить что-то вроде этого (на основе данных, представленных выше):

ORDER_ID    EMPLOYEE    QTY    SIZE    COLOR
3           fred        5      m       red
1           dan         15     l       red

или не может это сделать в 1запрос

Ответы [ 2 ]

0 голосов
/ 07 февраля 2019

Если у вас есть MS SQL, тогда я должен сообщить вам следующий запрос: </p> <pre><code>WITH prepare AS ( SELECT Orders.EMPLOYEE , Order_Activity.QTY , Order_Activity.SIZE , Order_Activity.COLOR , ROW_NUMBER() OVER (PARTITION BY Orders.ORDER_ID ORDER BY Order_Activity."date") AS rnbr FROM Orders INNER JOIN Order_Activity ON Orders.ORDER_ID = Order_Activity.ORDER_ID ) SELECT prepare.EMPLOYEE , prepare.QTY , prepare.SIZE , prepare.COLOR FROM prepare WHERE prepare.nmbr = 1

Вы можете попробовать этот оператор в My SQL, потому что этот запрос выполняетк стандартному SQL.

0 голосов
/ 07 февраля 2019

Вы можете использовать внутреннее объединение с подзапросом для максимальной группы дат da_id_1001 *

select o.ORDER_ID, o.EMPLOYEE , oa.QTY, oa.SIZE, oa.SIZE
from Orders o 
inner join  Order_Activity oa on o.ORDER_ID = oa.ORDER_ID 
inner join  (
  select  ORDER_ID, max(date) max_date
  from Order_Activity
  group by ORDER_ID 
) tt on tt.ORDER_ID = o.ORDER_ID 
    and tt.max_date = oa.date
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...