首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >Mysql在子查询中使用MAX

Mysql在子查询中使用MAX
EN

Stack Overflow用户
提问于 2018-10-23 01:46:58
回答 3查看 63关注 0票数 1

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

代码语言:javascript
复制
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年结束的数据。下面是一个包含140000个原始数据的表格示例(并未显示所有列)。

codeAdherent A有2018、2017、2016年的数据。

codeAdherent B有data for2018,2017年

仅适用于2017年的codeAdherent C。

如果我在2017年进行选择,我得到了所有三个codeAdherent,那么最大间隔将排除A和B……但那是行不通的

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2018-10-23 03:03:50

您可以使用NOT EXISTS查看2018年是否有记录:

代码语言:javascript
复制
SELECT dateFin, codeAdherent, codeArticle
FROM hs AS t
WHERE codeFamilleArticle IN ('CNI', 'COT', 'ABO', 'ABOW', 'CNIW', 'O&T', 'EPH', 'TAX')
AND codeAdherent != 0
-- filter 2017 rows
AND dateFin >= '2017-01-01'
AND dateFin <  '2018-01-01'
-- filter rows where 2018 data does not exist
AND NOT EXISTS (
    SELECT 1
    FROM hs
    WHERE codeAdherent = t.codeAdherent
    AND dateFin >= '2018-01-01'
)
票数 1
EN

Stack Overflow用户

发布于 2018-10-23 01:50:04

你可以这样做:

代码语言:javascript
复制
HAVING YEAR(MAX(hs.dateFin)) = 2017
票数 0
EN

Stack Overflow用户

发布于 2018-10-23 02:07:35

您不能在Where子句中使用像Max()这样的聚合函数。您可以简单地修改您的分组条件,使其仅包含2017年的日期,然后在分组依据之后确定Max()日期。

代码语言:javascript
复制
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 
WHERE hs.dateFin BETWEEN '2017-01-01' 
                     AND '2017-12-31'
GROUP BY hs.codeAdherent, hs.codeArticle 
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/52934953

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档