Mysql在子查询中使用MAX?

内容来源于 Stack Overflow,并遵循CC BY-SA 3.0许可协议进行翻译与使用

  • 回答 (2)
  • 关注 (0)
  • 查看 (119)

为什么我不能使用返回组错误的子查询?

SELECT hs.dateFin, hs.codeAdherent, hs.codeArticle 
FROM hs 
WHERE hs.codeFamilleArticle IN ('CNI', 'COT', 'ABO', 'ABOW',
                                'CNIW', 'O&T', 'EPH', 'TAX') 
AND codeAdherent != 0 
AND MAX(hs.dateFin) BETWEEN '2017-01-01' 
                        AND '2017-12-31'
GROUP BY hs.codeAdherent

2018-01-01和2018-12-31存在相同的数据,但我只想获得2017年结束的数据

提问于
用户回答回答于

您不能使用像Max()inside Where子句这样的聚合函数。您将需要在Having子句中使用它(因为只有在完成分组后才能计算最大值)。

SELECT MAX(hs.dateFin), hs.codeAdherent, hs.codeArticle 
FROM hs 
WHERE hs.codeFamilleArticle IN ('CNI', 'COT', 'ABO', 'ABOW',
                                'CNIW', 'O&T', 'EPH', 'TAX') 
AND hs.codeAdherent != 0 
GROUP BY hs.codeAdherent, hs.codeArticle 
HAVING MAX(hs.dateFin) BETWEEN '2017-01-01' 
                           AND '2017-12-31'
用户回答回答于

你可以这样做:

HAVING YEAR(MAX(hs.dateFin)) = 2017

扫码关注云+社区

领取腾讯云代金券