我有一个mysql状态表,它包含三个元素,a,b和c
id a b c time
--------------------------
1 0 1 1 78
2 1 1 0 89
3 1 0 0 105
4 0 0 0 107
5 1 0 1 122
6 0 0 1 134
7 0 1 0 167
8 1 1 1 168
9 0 1 0 177
10 0 0 0 180
例如,用户将时间的界限选择为时间>100和时间<170
但是我需要在第一条返回的记录之前知道'a'的值(其中id=2)
我试图找到最有效的方法来创建这个查询,而不必求助于两个单独的查询。
SELECT a, time FROM states WHERE time<100 order by time DESC limit 1
AND
SELECT a, time FROM states WHERE time>100 AND time<170 ORDER BY time ASC
返回结果集。。。
a time
1 89
1 105
0 107
1 122
0 134
0 167
0 168
如有任何建议,我们将不胜感激,谢谢!
1条答案
按热度按时间z4iuyo4d1#
一种方法使用
LEAD()
:您还可以使用:
唉,当子查询不返回任何值时,这就不起作用了。这是可以修复的,但会使查询复杂化。
但是,您的解决方案实际上很好(使用
union all
):从性能的Angular 来看,如果您在
time
. 当没有小于等于100的值时,这也很容易处理问题。