mysql查询if条件

标签 mysql

你好,我有两张 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/

相关文章:

mysql - 将表从 latin1 更新为 utf8 是否安全

python - 属性错误: '_mysql.connection' object has no attribute 'cursor'

mysql - WooCommerce 产品属性键和值存储在哪里

php - 在php中检索两个表数据

mysql - PDO别名代码错误

java - Netty 使用数据库连接和查询?

MYSQL CSV 导入 - 无法从您发送到 GEOMETRY 字段的数据中获取几何对象

php - 检查目录中的文件名是否作为值存在于数据库中

mysql - MySQL 中的订单日期格式为 "01 August 2013"

mysql - 按 information_schema 自动递增