Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/mysql/71.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php 从布尔更改表中进行高效选择_Php_Mysql_Sql - Fatal编程技术网

Php 从布尔更改表中进行高效选择

Php 从布尔更改表中进行高效选择,php,mysql,sql,Php,Mysql,Sql,我正试图为我正在进行的项目找出一个有效的查询 我们正在将一个开关状态记录到一个表中,每次它更改时,一行都会添加新值0或1 以下是表格的简化结构: day | hour | state -----+------+------- 10 | 1 | 1 # day 10 10 | 6 | 0 10 | 21 | 1 11 | 3 | 0 # day 11 11 | 6 | 1 13 | 13

我正试图为我正在进行的项目找出一个有效的查询

我们正在将一个开关状态记录到一个表中,每次它更改时,一行都会添加新值0或1

以下是表格的简化结构:

 day | hour | state 
-----+------+-------
  10 |    1 |     1  # day 10
  10 |    6 |     0 
  10 |   21 |     1 

  11 |    3 |     0  # day 11
  11 |    6 |     1

  13 |   13 |     0  # day 13
....
现在我们需要做一个每日概述,如下所示:

Day 11 : Switch was on during 0-3, 6-24
从日志中选择*,其中day=11将仅给出[3,0]和[6,1]。从这些我们可以猜到它从开始到结束,但是第12天呢

从日志中选择*,其中day=12没有给出任何信息,显然-没有任何线索可以猜测

获取给定一天的开始和结束状态的有效和可靠的方法是什么?比如在第12天之前选择一个条目,在第12天之后选择一个条目

将为您提供从第12天之前的最后一个条目到第12天之后的第一个条目之间的所有信息。 如果您不需要知道状态何时更改,并且知道状态至少在所选日期的午夜之前没有更改就足够了,那么第二部分可能是不必要的

SELECT 
    day,
    hour,
    state
FROM
    log
WHERE
    day*100+hour 
    BETWEEN
        (SELECT max(day*100+hour) FROM log WHERE day < 12) 
    AND
        (SELECT min(day*100+hour) FROM log WHERE day > 12)