我有这样的查询
SELECT * FROM `message` WHERE sender = 10
ORDER BY `message`.`date` AND `message`.`topic` ASC
此查询显示每条消息。 我想只选择具有最早日期的特定主题的第一行。
有没有办法通过sql方式解决这个问题?
答案 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 = ?;