Py学习  »  DATABASE

mysql在子查询中使用max

Chamarejc • 6 年前 • 1817 次点击  

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

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个raw的表示例(并非所有列都显示)。

Here

代码依附者A拥有2018、2017、2016年的数据。

代码粘附者B有2018、2017年的数据

代码遵守者C仅适用于2017年。

如果我在2017年做了一个选择,我得到所有三个共同遵守,那么最大之间将排除A和B…但那不管用

Python社区是高质量的Python/Django开发社区
本文地址:http://www.python88.com/topic/39810
文章 [ 3 ]  |  最新文章 6 年前
Madhur Bhaiya
Reply   •   1 楼
Madhur Bhaiya    6 年前

不能使用聚合函数,如 Max() 里面 Where 条款。你可以简单地修改 where 条件仅包括2017年的日期,然后确定 小精灵 分组后的日期。

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 
Dave
Reply   •   2 楼
Dave    6 年前

你可以这样做:

HAVING YEAR(MAX(hs.dateFin)) = 2017
Salman A Jan Hančič
Reply   •   3 楼
Salman A Jan Hančič    6 年前

你可以用 NOT EXISTS 检查2018年是否没有记录:

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'
)