在where子句中具有多列的子查询

Yairopro

我有一个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) )

我应该怎么做?

戈登·利诺夫(Gordon Linoff)

我认为这是您的意图:

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] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

具有替换的子查询无法在WHERE子句中识别

SQL Server:如何提高WHERE子句中具有多个CTE和子查询的查询的性能

where子句中的子查询

在where子句中具有相关子查询的SQL查询

MySQL WHERE IN子查询具有多列

子查询中where子句中的两列

IN / ALL / ANY子查询where子句中的未知列

SQLite 子查询 where 子句中列的总和

与查询具有相同WHERE子句的子查询

使用where子句中具有over(partition)的列别名

laravel where 子句中的子查询

SQLAlchemy-WHERE子句中的子查询

WHERE子句中的HIVE SQL子查询

Sequelize-where子句中的子查询

具有多列的子查询

无法使用HAVING子句中具有聚合值的子查询表联接中的单值列

当where子句中使用的索引列具有特定值时,Azure sql查询速度很慢

如何编写具有多个字段的mysql查询(在where子句中具有组合)

在WHERE子句中具有集合的HQL

在WHERE子句中使用子查询结果列时的未知列

在WHERE子句中具有动态列名称的MVC Linq查询

“ WHERE”子句中具有NEWID()的奇数SQL Server(TSQL)查询结果

EF C# 构建在 WHERE 子句中具有多个谓词的复杂查询

如果WHERE子句中没有值,那么列的顺序在多列索引中是否重要?

'where 子句中的未知列“有”

在没有子查询重复的情况下在各种 WHERE 子句中重用 MySQL 子查询 - 已解决

Sqoop - 导入 - 查询子命令 - where 子句中的参数

Case子查询在where子句中返回太多行

如何在openquery where子句中使用子查询