我有这样的表格(还有" 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
答案 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;