查询以选择日期间隔

时间:2014-08-30 23:18:57

标签: mysql sql

我有这样的表格(还有" device_id"" timestamp"列)

day  | interval  |  value
----------------------------
1    | 14        |  63  // start of a day
1    | 14        |  83
1    | 14        |  73

1    | 15        |  23
1    | 15        |  33
1    | 15        |  50

2    | 16        |  23  // start of a day
2    | 16        |  33
2    | 16        |  50

我想在一天内选择所有间隔。这很简单。

但是,间隔可以在一天翻转之前开始,或稍微结束:

day  | interval  |  value
----------------------------
7    | 14        |  63
7    | 14        |  83
8    | 14        |  73  // start of a day

8    | 15        |  23
8    | 15        |  33
8    | 15        |  50

8    | 16        |  23
8    | 16        |  33
9    | 16        |  50  // start of a day

现在我想选择所有三个间隔 - 或者甚至更好的间隔,这些间隔主要是在那一天。

SELECT ... WHERE day = 8

仅给出部分开始/结束间隔(14,16)。那是无用的,我需要完整的间隔。

如果没有解决方案,我只会做三个查询,但可能会有一些我不知道的SQL技巧?

它是从PHP调用的MySQL。

更直观:

  day 7           | day 8             | day 9
------------------+-------------------+---------------
   ###13###  ###14###  ###15###  ###16###   ###17###
        ...  63 83 73  23 33 50  23 33 50   ...  

我想要第8天的所有价值 - >间隔14,15,16

2 个答案:

答案 0 :(得分:1)

你正在寻找这个:

SELECT * FROM intervals 
WHERE interval IN (
    SELECT DISTINCT interval FROM intervals WHERE day = 8)

这将选择所有间隔数据,其中该间隔的至少一个条目在第8天发生。子查询确定当天发生的唯一间隔,然后外部查询使用它来选择其细节。

答案 1 :(得分:0)

SELECT DISTINCT y.* 
  FROM my_table x 
  JOIN my_table y 
    ON y.some_column = x.some_column 
 WHERE x.some_other_column = 8;
相关问题