MySQL Запрос на получение данных из формы GROUP BY и нескольких ORDER BY с таблицей «Много связей» - PullRequest
1 голос
/ 18 апреля 2020

Это система очереди транспортных средств. Я буду извлекать данные из каждого из 1 данных по категориям с определенными условиями их приоритета.

Приоритетный порядок: 1. loadtypes.priority_order = AS C (1,2,3,4, ... ), затем 2. queues.date_plan = AS C (2020-04-17,2020-04-18, ...), затем 3. windows .priority_order = AS C (1,2,3 , 4, ...), затем 4. queues.queue_number = as c (MAT-0001, MAT-0002, MAT-0003)

Таблица LoadType

enter image description here

Окно таблицы

enter image description here

Таблица Очереди

enter image description here

Запрос заказа по приоритету:

SELECT loadtypes.loadtype_code, queues.date_plan, windows.window_name, queues.queue_number FROM queues,loadtypes,windows WHERE queues.loadtype_id=loadtypes.loadtype_id AND queues.window_id=windows.window_id ORDER BY loadtypes.priority_order ASC, queues.date_plan ASC, windows.priority_order ASC, queues.queue_number ASC 

enter image description here

Теперь я получу 1 тип загрузки группы данных по первой строке с указанным выше приоритетом заказа.

enter image description here

Это мой вопрос о проблеме:

SELECT loadtypes.loadtype_code, queues.date_plan, windows.window_name, queues.queue_number FROM queues,loadtypes,windows WHERE queues.loadtype_id=loadtypes.loadtype_id AND queues.window_id=windows.window_id ORDER BY loadtypes.priority_order ASC, queues.date_plan ASC, windows.priority_order ASC, queues.queue_number ASC GROUP BY queues.loadtype_id

Спасибо.

1 Ответ

0 голосов
/ 18 апреля 2020

Если вы используете MySQL 8.0, то будет работать следующее решение. Также вы должны использовать JOIN вместо объединения таблиц в предложении WHERE.

SELECT 
    lt.loadtype_code, 
    q.date_plan, 
    w.window_name, 
    q.queue_number
FROM    
(
    SELECT 
        lt.loadtype_code, 
        q.date_plan, 
        w.window_name, 
        q.queue_number,
        row_number() over (partition by lt.loadtype_code order by window_name) as rnk

    FROM queues q

    JOIN loadtypes lt
    ON q.loadtype_id = lt.loadtype_id

    JOIN windows w
    q.window_id = w.window_id

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