mysql:按2列查询最大日期组错误结果

mysql:按2列查询最大日期组错误结果,mysql,Mysql,我的数据库中有这个表 **示例数据**** (表名=章节内容) 我想为每个statecode列和policyname列查找max datepublished 与此类似,结果应该只有一条记录,即每个国家/地区/政策的最大发布日期 因此,一个国家应该有3项政策记录(WEEE/电池/包装),如 我使用的mysql代码是 SELECT t.section_name, t.report_text, t.countryname, t.policyname,

我的数据库中有这个表

**示例数据****

(表名=章节内容)

我想为每个statecode列和policyname列查找max datepublished

与此类似,结果应该只有一条记录,即每个国家/地区/政策的最大发布日期

因此,一个国家应该有3项政策记录(WEEE/电池/包装),如

我使用的mysql代码是

SELECT  t.section_name,
        t.report_text,
        t.countryname,
        t.policyname,
        t.statecode,
        t.datepublished,
        date_format(t.dateupdated,"%Y-%m-%d")as dateupdated

FROM sections_content t

INNER JOIN (
            select max(datepublished) as Maxdate,statecode,policyname
            from sections_content
            group by statecode,policyname
            ) tm

            ON t.datepublished= tm.Maxdate and t.statecode = tm.statecode and t.policyname=tm.policyname

WHERE t.section_name="Executive Summary"
但结果是错误的,一些国家没有选择所有的政策

例如南非国家只挑选电池和包装,但缺少WEEE(但数据库中有南非的WEEE)

所以我想请任何人检查我的代码有什么问题。
感谢您的帮助。

问题在于,对于一个简单的问题,您的查询太复杂了,您已经在查询中找到了答案:

就这样试试吧:

SELECT  policyname,
        statecode,
        max(datepublished)
FROM sections_content
WHERE section_name="Executive Summary"
group by statecode,policyname

我觉得不错。See report_text不是提供的数据集中的一列。南非不是提供的数据集中的一个值。@上面的草莓表只是示例数据,但实际数据允许,我们只能对实际提供的信息进行评论。@草莓好的,我已经编辑过了,但表中有上百个国家,我无法提供所有信息。无论如何,谢谢你的帮助。我看不出重印OP的子查询有什么好处。也许仅仅因为它是正确的查询,没有必要对一个简单的问题做出复杂的回答。OP希望返回表中所有相关的列。@curiousp如果这回答了问题,那么这个问题就很容易误导人@草莓嘿,我真的很感激你的帮助,如果我让你误会了,我很抱歉。这是我的错,不要生气。求你了,我对你的回答投了赞成票,因为你乐于助人。
SELECT  t.section_name,
        t.report_text,
        t.countryname,
        t.policyname,
        t.statecode,
        t.datepublished,
        date_format(t.dateupdated,"%Y-%m-%d")as dateupdated

FROM sections_content t

INNER JOIN (
            select max(datepublished) as Maxdate,statecode,policyname
            from sections_content
            group by statecode,policyname
            ) tm

            ON t.datepublished= tm.Maxdate and t.statecode = tm.statecode and t.policyname=tm.policyname

WHERE t.section_name="Executive Summary"
SELECT  policyname,
        statecode,
        max(datepublished)
FROM sections_content
WHERE section_name="Executive Summary"
group by statecode,policyname
DROP TABLE IF EXISTS sections_content;

CREATE TABLE sections_content
(Section_name VARCHAR(30) NOT NULL
,countryname  VARCHAR(30) NOT NULL 
,policyname VARCHAR(30) NOT NULL
,statecode CHAR(2) NOT NULL
,datepublished DATE NOT NULL
,dateupdated DATE NULL
,PRIMARY KEY(countryname,policyname,statecode,datepublished) -- assumed PK
);

INSERT INTO sections_content VALUES
('Executive Summary','Algeria','WEEE','DZ','2016-05-11','2017-02-16'),
('Executive Summary','Algeria','WEEE','DZ','2017-02-15','2017-02-16'),
('Executive Summary','Algeria','Batteries','DZ','2017-02-15','2017-02-16'),
('Executive Summary','Algeria','Packaging','DZ','2017-02-15','2017-02-16'),
('Executive Summary','South Africa','Packaging','DZ','2017-02-15','2017-02-16');

SELECT t.*
  FROM sections_content t
  JOIN 
     ( SELECT MAX(datepublished) Maxdate
            , statecode
            , policyname
            , countryname
         FROM sections_content
        GROUP 
           BY statecode
            , policyname
            , countryname
     ) tm
    ON t.datepublished = tm.Maxdate 
   AND t.statecode = tm.statecode 
   AND t.policyname = tm.policyname
   AND t.countryname = tm.countryname
 WHERE t.section_name = "Executive Summary";

 +-------------------+--------------+------------+-----------+---------------+-------------+
 | Section_name      | countryname  | policyname | statecode | datepublished | dateupdated |
 +-------------------+--------------+------------+-----------+---------------+-------------+
 | Executive Summary | Algeria      | Batteries  | DZ        | 2017-02-15    | 2017-02-16  |
 | Executive Summary | Algeria      | Packaging  | DZ        | 2017-02-15    | 2017-02-16  |
 | Executive Summary | South Africa | Packaging  | DZ        | 2017-02-15    | 2017-02-16  |
 | Executive Summary | Algeria      | WEEE       | DZ        | 2017-02-15    | 2017-02-16  |
 +-------------------+--------------+------------+-----------+---------------+-------------+