Mysql 从表中选择,直到找到特定值

Mysql 从表中选择,直到找到特定值,mysql,Mysql,我有一张这样的桌子: +--------+---------------------+------------+ | id | timestamp | value | +--------+---------------------+------------+ | 566076 | 2013-10-17 11:16:38 | 1 | -> get these | 565989 | 2013-10-17 11:15:27 | 1

我有一张这样的桌子:

+--------+---------------------+------------+
| id     | timestamp           | value      |
+--------+---------------------+------------+
| 566076 | 2013-10-17 11:16:38 | 1          | -> get these
| 565989 | 2013-10-17 11:15:27 | 1          | ->
| 565881 | 2013-10-17 11:14:17 | 1          | ->
| 565860 | 2013-10-17 11:14:10 | 1          | ->
| 565869 | 2013-10-17 11:14:09 | 0          |
| 565869 | 2013-10-17 11:14:08 | 0          |
| 565869 | 2013-10-17 11:14:07 | 0          |
| 565869 | 2013-10-17 11:14:06 | 1          |

我如何选择所有记录,这些记录的
时间戳大于与
0
值关联的最大
时间戳。SQL中没有“顺序”,只有“特定列的顺序”。有了它,你就可以轻松地解决你的问题了

SELECT * FROM t WHERE `value`='1' ORDER BY `timestamp` DESC
-这里的订单列是
时间戳
,降序(从您的示例中)。您可能还需要将
LIMIT
添加到行中。也可能是,您希望以特定顺序查找第一个零之前的所有内容,然后:

SELECT 
  * 
FROM 
  t 
WHERE 
  value=1
  AND
  timestamp>(SELECT timestamp FROM t WHERE `value`='0' ORDER BY `timestamp` DESC LIMIT 1)

-但是再一次,当您指定了特定的顺序时,可以这样做。

另一种方法,您可能会发现更容易理解

SELECT t.* 
FROM t 
INNER JOIN
(
    SELECT MAX(timestamp) AS MaxtimeStamp
    FROM t 
    WHERE `value`='0'
) sub1
ON t.timestamp > Sub1.MaxtimeStamp

如何编写执行此操作的过程?为什么不从表中选择id、时间戳、值,其中value=1,按时间戳DESC排序,或者从表中选择id、时间戳、值,其中value!=按时间戳描述的0订单?当然,我误解你了吗?并确保在(值、时间戳)上有一个索引,或者您需要un filesort..TILL对于数据库表没有任何意义。数据库表中的记录不是固有的顺序。任何顺序都必须由数据库程序员明确指定(而且,你的问题应该说明需要哪个顺序)。为什么结果集中不包括
5658692013-10-17 11:14:16,1
?通过哪种比较方法,它出现在
5658692013-10-17 11:14:19,0之后?你的问题仍然没有意义,你能详细说明一下吗?是的,确切地说,我想找到每一列,按时间戳排序,直到找到第一个零为止。我会试试你的例子。@ErikSoderstrom-好吧,这取决于你的
时间戳
顺序(
asc
desc
),如果你按时间戳排序,你应该得到id 565860、565869和565881,但这就是问题所在。没有“公正的命令”。这是按列排序的——也就是说,如果我们按时间戳设置顺序的话——当然,id可能会被洗牌。确实,问题需要进一步阐述。我已经推迟了加入,但这似乎是不可避免的。谢谢你的回答,我来试试。