查询:检查上一行值

时间:2014-07-13 13:38:27

标签: mysql

我有这样的查询

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

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

有没有办法通过sql方式解决这个问题?

1 个答案:

答案 0 :(得分:1)

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

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

如果你想显示整行,那就更加冗长了。这个例子假设(发件人,主题,日期)是唯一的,如果你不需要做一些额外的工作来摆脱重复。

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 = ?;