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
。。。结果是:
但是我想要的只是得到maxstate\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。