sql - 如何获得 DATEDIFF 的总和,但如果指定了一天,则在 24 小时内提供截止时间

标签 sql database

这实际上是我关于 stackoverflow 的第一个问题,所以如果我感到困惑或不清楚,我深表歉意。

话虽如此,这是我的问题:

我在一家汽车制造公司工作,我们最近实现了跟踪机器闲置时间的功能。这是通过评估称为“idle_start”的事件的开始和结束时间来完成的。

现在,我正在尝试获取机器闲置时间的总和。现在,我想通了,但是,一些空闲时间超过 24 小时。

因此,当我指定我只想查看某一天的 idle_time 总和时,该总和也会计算过去 24 小时的空闲时间。

我想提供在那个 24 小时内关闭的选项。这可能吗?

这里是查询:

{代码}

SELECT  r.`name` 'Producer'
     ,  m.`name` 'Manufacturer'
      -- , timediff(re.time_end, re.time_start) 'Idle Time Length'
      , SEC_TO_TIME(SUM((TIME_TO_SEC(TIMEDIFF(re.time_end, re.time_start))))) 'Total Time'
      , (SUM((TIME_TO_SEC(TIMEDIFF(re.time_end, re.time_start)))))/3600 'Total Time in Hours'
      , (((SUM((TIME_TO_SEC(TIMEDIFF(re.time_end, re.time_start)))))/3600))/((IF(r.resource_status_id = 2, COUNT(r.resource_id), NULL))*24) 'Percent Machine is Idle divided by Machine Hours'
 FROM resource_event re 
 JOIN resource_event_type ret
   ON re.resource_event_type_id  = ret.resource_event_type_id
 JOIN resource_event_type reep
   ON ret.parent_resource_event_type_id = reep.resource_event_type_id
 JOIN resource r
   ON r.`resource_id` = re.`resource_id`  
 JOIN manufacturer m
   ON m.`manufacturer_id` = r.`manufacturer_id`
WHERE re.`resource_event_type_id` = 19
  AND ret.`parent_resource_event_type_id` = 3
  AND DATE_FORMAT(re.time_start, '%Y-%m-%d') >= '2013-08-12'
   AND DATE_FORMAT(re.time_start, '%Y-%m-%d') <= '2013-08-18'
 -- AND re.`resource_id` = 8
  AND "Idle Time Length" IS NOT NULL
  AND  r.manufacturer_id = 13
  AND r.resource_status_id = 2
GROUP BY 1, 2

请随意忽略顶部的破折号。请告诉我是否可以更具体地解决这个问题,并减少那些愿意帮助我的人的麻烦。

非常感谢!

最佳答案

您需要使用 CASE 的条件 SUM

不确定您的数据库的确切语法,但类似于:

, SUM (CASE WHEN TIME_TO_SEC(TIMEDIFF(re.time_end, re.time_start))/3600 > 24 THEN 0
            ELSE TIME_TO_SEC(TIMEDIFF(re.time_end, re.time_start))/3600
       END)'Total Time in Hours'

关于sql - 如何获得 DATEDIFF 的总和,但如果指定了一天,则在 24 小时内提供截止时间,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18539578/

相关文章:

sql - 如何通过 OID 删除一条记录?

php - sql 查询在列中搜索我需要的特定模式的字符串

sql - 是否可以将下面两条SQL语句合二为一?

sql - 如何获取配置单元中仅具有 NULL 值的所有列的列表?

iPhone - 使用 TEXT 主键的 SQLite

java - 当 “parent” 表具有复合 PK 时,如何在 JPA 中建模一对多关系?

c# - SQL - group by 两列聚合问题

database - Hibernate和多线程,同步多个用户之间的变化

database - 使用 DBIx::Class 在 SQLite 数据库上创建索引

mysql - Moodle本地文件夹数据库更新