你好,我有两张 table a2_deal(我没有提到整张 table ,因为它很大)
deviceID companyID stage serverTime
1 14 -1 1349449200
1 1 -1 1349445600
2 21 -1 1349449200
3 17 -1 1349447160
1 14 3 1344449200
1 14 2 1340449200
和另一个名为 a2_comp
的表companyID name
1 Microsoft
14 DELL
15 APPLE
17 Google
我正在尝试使用以下查询获取公司的最新阶段:
SELECT deal.companyID, companies.name as Company,
if(max(serverTime),stage,Null) as Stage
FROM `a2_deal` AS deal
LEFT JOIN `a2_comp` AS companies ON deal.companyID = companies.companyID
GROUP BY companyID
ORDER BY serverTime
在我的查询中,我使用 if(max(serverTime),stage,Null) 作为阶段,这意味着选择与最近服务器时间相关的阶段值。即它应该给我 -1 作为 companyID 14 的阶段....但由于某种原因我没有得到正确的输出..请在这里解释我的逻辑是如何错误的......谢谢
最佳答案
你想要 groupwise maximum :
SELECT a2_comp.*, a2_deal.*
FROM a2_deal NATURAL JOIN (
SELECT companyID, MAX(serverTime) AS serverTime
FROM a2_deal
GROUP BY companyID
) t JOIN a2_comp USING (companyID)
查看 sqlfiddle .
关于mysql查询if条件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12863285/