簡體   English   中英

僅獲取具有5個表的最大值的行

[英]Get only rows with max value having 5 tables

我有這個查詢:

SELECT work_orders.id,work_orders.create_datetime,work_orders.location,
       work_orders.description,user_accounts.function as function,
       user_accounts.name as username,work_order_states.name as state,
       work_orders_history.state_id,max(work_order_states.id)
FROM `work_orders`
LEFT JOIN work_orders_history 
    on work_orders.id = work_orders_history.work_order_id
LEFT JOIN user_accounts 
    on work_orders.create_user_id = user_accounts.id
LEFT JOIN work_order_type 
    on work_orders_history.type_id = work_order_type.id
LEFT JOIN work_order_states 
    on work_orders_history.state_id = work_order_states.id

...的結果是這樣的: 在此處輸入圖片說明

但是我想要的只是獲得具有最大state_id的行。

我已經嘗試過各種查詢,但這是我可以獲得的最佳結果。

編輯:由於結果超過65k,因此很難提供提琴。 理想的結果如下圖所示: 在此處輸入圖片說明

提前致謝。

您似乎在查詢中非常接近。 您需要添加GROUP BY並刪除您選擇的列之一。

SELECT work_orders.id,work_orders.create_datetime,work_orders.location,
       work_orders.description,user_accounts.[function] as [function],
       user_accounts.name as username,work_order_states.name as state,
       max(work_order_states.id)
FROM `work_orders`
LEFT JOIN work_orders_history 
    on work_orders.id = work_orders_history.work_order_id
LEFT JOIN user_accounts 
    on work_orders.create_user_id = user_accounts.id
LEFT JOIN work_order_type 
    on work_orders_history.type_id = work_order_type.id
LEFT JOIN work_order_states 
    on work_orders_history.state_id = work_order_states.id

GROUP BY work_orders.id,work_orders.create_datetime,work_orders.location,
       work_orders.description,user_accounts.function,
       user_accounts.name,work_order_states.name
HAVING work_orders_states.ID = (SELECT MAX(state_id) FROM work_orders_history)

我認為您正在尋找的是HAVING和GROUP BY子句的組合。

SELECT work_orders.id,work_orders.create_datetime,work_orders.location,
       work_orders.description,user_accounts.function as function,
       user_accounts.name as username,work_order_states.name as state,
       work_orders_history.state_id,max(work_order_states.id)
FROM `work_orders`
LEFT JOIN work_orders_history 
    on work_orders.id = work_orders_history.work_order_id
LEFT JOIN user_accounts 
    on work_orders.create_user_id = user_accounts.id
LEFT JOIN work_order_type 
    on work_orders_history.type_id = work_order_type.id
LEFT JOIN work_order_states 
    on work_orders_history.state_id = work_order_states.id

GROUP BY work_orders.id,work_orders.create_datetime,work_orders.location,
       work_orders.description,user_accounts.function,
       user_accounts.name,work_order_states.name,
       work_orders_history.state_id

HAVING work_orders_history.state_id=max(work_order_states.id)

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM