【问题标题】:SQL join left get MAX(date)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)

标签: mysql sql join greatest-n-per-group


【解决方案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

【讨论】:

  • 感谢您的回答,您的查询(@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,我的查询也有同样的问题:/
  • 你能给出你想要的结果的样本记录吗?
  • 当出现此类问题时,请始终添加具有您想要的结果的示例记录,以便我们可以更直观地了解问题:)
猜你喜欢
  • 2020-10-12
  • 1970-01-01
  • 1970-01-01
  • 2014-08-10
  • 2010-09-29
  • 1970-01-01
  • 2021-12-21
  • 1970-01-01
相关资源
最近更新 更多