有序 SQL 时间戳提取

Ordered SQL timestamp extraction

首先,我试过搜索这个主题但一无所获(似乎找不到合适的关键词),所以如果这是重复的,请告知。

我一直在尝试从我的数据库中获取一些 time_stamp 并将它们按时间间隔排序。例如我 run 查询

"SELECT `time_stamp` FROM registo albufeira ".$nome."` WHERE `cota` > '".$piInfo['cota max']."'" 

并使用php代码来安排它的间隔。

例如,如果我有对应于以下日期的 time_stamps:

2014-12-30 23:51:00
2014-12-30 23:52:00
2014-12-30 23:53:00
2014-12-30 23:54:00
2014-12-31 01:35:00
2014-12-31 01:36:00
2014-12-31 01:37:00

我会得到一个间隔数组,例如:

[0] => Array
    [0] => 2014-12-30 23:51:00
    [1] => 2014-12-30 23:54:00
[1] => Array
    [0] => 2014-12-31 01:35:00
    [1] => 2014-12-31 01:37:00

我已经设法获得 php 代码以获得想要的结果,但我觉得这可以使用单个 SQL 查询来实现。谁能指出我正确的方向?

SQL 查询可以是

SELECT 
  DATE_FORMAT(`time_stamp`,'%y-%m-%d') AS day_id, 
  MIN(`time_stamp`) AS start_ts,    MAX(`time_stamp`) AS end_ts 
FROM registo
GROUP BY DATE_FORMAT(`time_stamp`,'%y-%m-%d')

试试这个:

SELECT DATE(time_stamp) AS `day`, MIN(time_stamp) AS first, MAX(time_stamp) AS last
FROM `registo albufeira`      # fix the table name
WHERE `cota` > '...'          # put your condition here
GROUP BY DATE(time_stamp) 

它将产生如下内容:

+------------+---------------------+---------------------+
| day        | first               | last                |
+------------+---------------------+---------------------+
| 2014-12-30 | 2014-12-30 23:51:00 | 2014-12-30 23:54:00 |
| 2014-12-31 | 2014-12-31 01:35:00 | 2014-12-31 01:37:00 |
+------------+---------------------+---------------------+

然后您可以通过 PHP 代码以所需的格式存储它。

$data = array();
while ($row = mysqli_fetch_assoc($result)) {
    $data[] = array($row['first'], $row['last']);
}

上面的代码将生成您在问题中转储的数据结构,但我强烈建议您使用字符串键('day'、'first'、'last',无论您想要什么)而不是数字:

$data = array();
while ($row = mysqli_fetch_assoc($result)) {
    $data[$row['day']] = $row;
}

添加一个print_r($data);并检查差异。

更新:

如果间隔的长度不是一天而是 300 秒,则将 DATE(time_stamp) 替换为 UNIX_TIMESTAMP(time_stamp) DIV 300