SQL join left get MAX(date)

Posted

技术标签:

【中文标题】SQL join left get MAX(date)【英文标题】: 【发布时间】:2013-03-28 20:53:13 【问题描述】:

我有这些表:

通知 id INT 日期日期时间 ... 主题 身份证 名称 notice_theme id_notice id_theme

我想获取每个主题的最新通知。

SELECT id_theme, n.id
FROM notice_theme
LEFT JOIN (
    SELECT id, cdate
    FROM notice
    ORDER BY cdate DESC
) AS n ON notice_theme.id_notice = n.id
GROUP BY id_theme

结果不好。一个主意 ?谢谢。

【问题讨论】:

您的 MAX(日期)在哪里? 无法保证连接表的 ORDER BY 将被保留。将 ORDER BY 放在外部选择中。 你需要添加 Max(n.cdate) 【参考方案1】:

有很多方法可以解决这个问题,但我已经习惯了这种方式。需要额外的子查询来分别计算每个ID 的最新cDate

SELECT  a.*, c.*
FROM    theme a
        INNER JOIN notice_theme b
            ON a.ID = b.id_theme
        INNER JOIN  notice c
            ON b.id_notice = c.ID
        INNER JOIN
        (
            SELECT  a.id_theme, MAX(b.DATE_CREATE) max_date
            FROM    notice_theme a
                    INNER JOIN notice b
                        ON a.ID_Notice = b.ID
            GROUP   BY a.id_theme
        ) d ON  b.id_theme = d.id_theme AND
                c.DATE_CREATE = d.max_date
SQLFiddle Demo

【讨论】:

感谢您的回答,您的查询(@JW):> id_theme----id_notice----date_create > 2-----------2---- --------2013-03-31 09:18:21 > 4-----------2------------2013-03-31 09 :18:21 > 1------------7------------2013-03-31 23:27:28 > 2-------- ---7------------2013-03-31 23:27:28 > 4------------11---------- -2013-02-16 04:40:21 > 5-----------12-----------2013-02-05 20:18:21 > 4-- ---------13------------2013-03-31 23:27:28 > 2------------14----- ------2013-03-15 20:18:21 使用 GROUP BY a.id,我的查询也有同样的问题:/ 你能给出你想要的结果的样本记录吗? 当出现此类问题时,请始终添加具有您想要的结果的示例记录,以便我们可以更直观地了解问题:)

以上是关于SQL join left get MAX(date)的主要内容,如果未能解决你的问题,请参考以下文章

EF Linq to Sql 多表left join查询并对结果group by分组之后进行count,max等处理

带有 LEFT JOIN 和 MAX 的 LibreOffice HSQLDB WHERE 子句?

Sql 两个表left join 查左表最时间最大的一条记录显示

Sql查询left join

Sql关于两个left join 的问题

SQL-left join 左表数据多次出现,求解!