Mysql 仅获取最大值为5个表的行

Mysql 仅获取最大值为5个表的行,mysql,sql,Mysql,Sql,我有一个疑问: 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

我有一个疑问:

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
。。。结果是:

但是我想要的只是得到max
state\u id
的行

我已经尝试过各种查询,但这是我能得到的最好结果

编辑:因为它的结果超过65k,所以很难提供一把小提琴。理想的结果如下图所示:


提前谢谢。

我想您需要的是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)

您的查询似乎非常接近。您需要添加一个GROUP BY并删除其中一个select列

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)

示例数据集(例如SQLFIDLE)和所需结果将有所帮助。由于GROUP BY section中有“AS XXXX”,因此此查询将不会运行。这些需要删除,然后它将运行。此查询给出一个错误(“having子句”中的未知列“work\u order\u states.id”)。团队合作良好,请支持分组。然后只需添加having子句以仅选择max记录。谢谢…这个问题给了我同样的结果,我有我的道歉。我刚刚看到了你想要的代码。您只想要work\u orders\u states表中可用的最高stateID的记录还是work\u orders\u history表中可用的最高stateID的记录?我正在查找work\u orders\u history表中可用的最高stateID。