我有一个message
包含4个主要列的表:
id
:消息的ID。interlocutor_id
:对话者的ID。timestamp
:消息已发送的时间戳。expiration
:消息何时过期的时间戳。如果该值低于当前时间戳,则该过期。我希望从每个对话者那里获取所有最新消息(即使它们已过期),也希望所有未过期的消息(即使它们不是最新消息)也是如此。
我尝试了此查询,但是后来我明白我无法进行多列子查询:
SELECT * FROM message
WHERE (expiration > 'CURRENT_TIMESTAMP')
OR (id IN (SELECT id, MAX(timestamp) FROM message GROUP BY interlocutor_id) )
我应该怎么做?
我认为这是您的意图:
SELECT m.*
FROM message m
WHERE (m.expiration > 'CURRENT_TIMESTAMP') OR
m.timestamp = (SELECT MAX(timestamp)
FROM message m2
WHERE m2.interlocutor_id = m.interlocutor_id
);
另外,当您说时'CURRENT_TIMESTAMP'
,您的意思是datetime('now', 'localtime')
。
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句