mysql - 在一个查询中从同一个 mysql 表中查找项目和相关项目集

标签 mysql sql

我有一个表,用于存储项目及其相关时间。对于这个问题,以下列是相关的:

 CREATE TABLE my_items 
 (
   id INTEGER,
   category INTEGER,
   t DOUBLE
  );

我想选择特定类别(例如 1)中的所有项目以及这些项目的时间在 +- 5(秒)以内的项目集。

我可能会在脚本中使用两种类型的查询来执行此操作:

 SELECT id,t from my_items where category=1;

然后循环结果集,使用每个结果行的时间作为 t_q1,并执行单独的查询:

 SELECT id from my_items where t >= t_q1-5 AND t <= t_q1+5;

如何在一个查询中完成此操作?

最佳答案

您可以使用联接。获取选择所有类别 1 项目的子查询,并将其与原始表连接,条件是时间在 +/- 5 之内。可能会返回重复的行,因此您可以按 id 分组以避免这种情况:

SELECT t.*
FROM myTable t
JOIN (SELECT id, timeCol FROM myTable WHERE category = 1) t1 
   ON t.timeCol BETWEEN (t1.timeCol - 5) AND (t1.timeCol + 5)
   OR t.id = t1.id
GROUP BY t.id;

我添加了 OR t.id = t1.id 以确保类别 1 的行仍然包含在内。

关于mysql - 在一个查询中从同一个 mysql 表中查找项目和相关项目集,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28175242/

相关文章:

mysql - 为什么我在写入 300KB/sec 时绑定(bind)了 I/O 以写入 MySQL?

mysql - #1062 - 启用 Auto_increment 时,键 1 的重复条目 '1'

mysql - 无法连接到 mysql docker 容器

mysql - 在mysql中快速搜索不同的日期部分

sql - 在 hibernate 中映射到 varchar 和 nvarchar

sql - 选择数据库中每个表的前3行

sql - 发生冲突的 Postgres 会更新复合主键

java - Hibernate JPA 递归查询

mysql - 如何使用从数据库中排除的某些表进行 MySQL 转储

php - 如果语句返回 true,而它应该是 false..我认为