我有一张表,我可以按时间排序,例如。现在我想根据时间选择我的数据,例如在一行中使用column_x = something和该行的一些最近邻居(预先给出的具体数字)。在请求中我想选择多行。让我举一个简单的例子说明:
+------+----------+----------+
| Time | Column_1 | Column_2 |
+------+----------+----------+
| 1 | 0 | 5 |
| 2 | 0 | 6 |
| 3 | 1 | 9 |
| 4 | 1 | 8 |
| 5 | 0 | 5 |
| 6 | 0 | 8 |
| 7 | 0 | 9 |
| 8 | 0 | 6 |
| 9 | 0 | 4 |
| 10 | 1 | 5 |
| 11 | 0 | 2 |
| 12 | 0 | 3 |
| 13 | 0 | 1 |
+------+----------+----------+
我想选择结果数据,使得COLUMN_1 = 1,并且两个最接近的邻居及时。所以我期待的结果就是这张表:
+------+----------+----------+
| Time | Column_1 | Column_2 |
+------+----------+----------+
| 1 | 0 | 5 |
| 2 | 0 | 6 |
| 3 | 1 | 9 |
| 4 | 1 | 8 |
| 5 | 0 | 5 |
| 6 | 0 | 8 |
| 8 | 0 | 6 |
| 9 | 0 | 4 |
| 10 | 1 | 5 |
| 11 | 0 | 2 |
| 12 | 0 | 3 |
+------+----------+----------+
答案 0 :(得分:1)
一个解决方案可能是这个,我不知道t是否是最好的一个:
select
time
,col_1
,col_2
from @tbl
where col_1 = 1
union
select
t2.time
,t2.col_1
,t2.col_2
from @tbl t1
inner join @tbl t2
on t1.time = t2.time-1
or t1.time = t2.time-2
where t1.col_1 = 1
union
select
t2.time
,t2.col_1
,t2.col_2
from @tbl t1
inner join @tbl t2
on t1.time = t2.time+1
or t1.time = t2.time+2
where t1.col_1 = 1