【问题标题】:MySQL: Get start & end timestamp for each dayMySQL:获取每天的开始和结束时间戳
【发布时间】:2014-03-14 15:18:48
【问题描述】:

MYSQL: Find Start and End Timestamp of a consecutive count 的问题类似,我有一张包含类似数据的表格:

状态时间 |阅读 2014-01-01 00:00 | 255 2014-01-01 01:00 | 255 2014-01-01 02:00 | 255 2014-01-01 03:00 | 255 2014-01-01 04:00 | 255 2014-01-01 05:00 | 241 2014-01-01 06:00 | 189 2014-01-01 07:00 | 100 2014-01-01 08:00 | 20 2014-01-01 09:00 | 0 2014-01-01 10:00 | 1 2014-01-01 11:00 | 1 2014-01-01 12:00 | 0 2014-01-01 13:00 | 21 2014-01-01 14:00 | 1 2014-01-01 15:00 | 0 2014-01-01 16:00 | 12 2014-01-01 17:00 | 63 2014-01-01 18:00 | 102 2014-01-01 19:00 | 198 2014-01-01 20:00 | 255 2014-01-01 21:00 | 255 2014-01-01 22:00 | 255 2014-01-01 23:00 | 255 2014-01-02 00:00 | 255 2014-01-02 01:00 | 255 2014-01-02 02:00 | 255 2014-01-02 03:00 | 255 2014-01-02 04:00 | 255 2014-01-02 05:00 | 208 2014-01-02 06:00 | 100 2014-01-02 07:00 | 48 2014-01-02 08:00 | 0 2014-01-02 09:00 | 0

我想提取读数高于 50低于 50startend 时间戳, 分别。我只是无法理解其他答案中提供的 SQL!

提前感谢您的帮助。

【问题讨论】:

  • 您想要的结果是什么?只是它“翻转”的时候?
  • 是的 - 当设备读数高于/低于 50 时,我试图每天获得两次。

标签: mysql timestamp


【解决方案1】:

如果它每天只低于/高于一次,您可以使查询变得非常简单;只需找到下面的最小和最大时间,按日期分组。

SELECT
  DATE(statustime) statusdate,
  MIN(CASE WHEN reading<50 THEN statustime ELSE NULL END) start_time,
  MAX(CASE WHEN reading<50 THEN statustime ELSE NULL END) end_time
FROM myTable
GROUP BY statusdate

An SQLfiddle to test with.

【讨论】:

  • 该死!说得太早了——虽然我现在每天只能得到两个读数,但它们是午夜前后的读数,而不是在过渡点:(
  • @user3061406 嗯,你能在 sqlfiddle 中添加一些示例数据吗?我猜你的数据在夜间并不总是较高而在白天较低,在这种情况下,此查询将中断。
  • 终于有一个要加载的数据集,它在 SQL Fiddle 中一切正常,但在我这里的设备上不起作用 - Debian Linux,MySQL 5.5.34 - 很奇怪!
  • 擦洗 - 工作正常,我有多个传感器读数,所以只需要添加一个 HAVING 子句。非常感谢您的帮助@Joachim
【解决方案2】:

试试这个代码:

  select *
    (select max(StatusTime) from tbl where Reading > 50) above_50,
    (select min(StatusTime) from tbl where Reading < 50) bellow_50;

【讨论】:

  • 我对此抱有很大希望,但我得到一个 MySQL 错误:第 2 行的 1064
【解决方案3】:

这样的?

SELECT DISTINCT MAX(StatusTime), MIN(StatusTime) 
FROM table_name
WHERE Reading < 50 OR Reading > 50;

【讨论】:

  • 我认为这个答案的问题在于 OP 想要开始和结束日期
  • ?这将始终不输出任何结果
  • 将 AND 更改为 OR 并将 MAX 和 MIN 添加到您的日期选择
  • 哎呀,对不起,我想,我的 mysql 技能已经生疏了
  • 感谢您的建议,但这给了我整个数据集的最小值/最大值。我正在寻找读数转换高于/低于 50 的时间(我预计这种情况每天会发生两次)。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2015-03-29
  • 1970-01-01
  • 2020-11-09
  • 1970-01-01
  • 2020-02-22
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多