查询:检查上一行的值

ADIN

我有这样的查询

   SELECT * FROM `message` WHERE sender = 10
    ORDER BY `message`.`date` AND `message`.`topic` ASC 

该查询显示每条消息。我只想选择最早日期的特定主题的第一行。

有什么办法可以通过sql方式解决此问题吗?

wvdz

如果您只想显示最早的日期,而在此行中没有其他信息,则可以非常简洁地完成:

   SELECT topic, MIN(date)
   FROM message
   WHERE sender = ?
   GROUP BY topic;

如果要显示整个行,则需要更多详细信息。此示例假定(sender,topic,date)是唯一的,如果不是,则需要做一些额外的工作来消除重复项。

WITH minDate AS
(
     SELECT sender, topic, MIN(date) AS date
     FROM message
     GROUP BY sender, topic;
)
SELECT m.*
FROM message m
JOIN minDate d ON m.topic = d.topic AND m.date = d.date AND d.sender = m.sender
WHERE sender = ?;

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章