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 子句?