3

これは実際、stackoverflow に関する私の最初の質問です。

そうは言っても、ここに私の問題があります:

私は自動車製造会社で働いており、最近、マシンがアイドル状態のときを追跡する機能を実装しました。これは、「idle_start」と呼ばれるイベントの開始時刻と終了時刻を評価することによって行われます。

現在、マシンのアイドル時間の合計を取得しようとしています。今、私はこれを理解しましたが、idle_times のいくつかは 24 時間よりも長いです。

そのため、特定の 1 日の idle_time の合計のみを表示するように指定すると、合計には 24 時間を過ぎたアイドル時間もカウントされます。

その 24 時間で CUTTING OFF のオプションを提供したいと考えています。これは可能ですか?

クエリは次のとおりです。

{コード}

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

上部のダッシュ マークは無視してかまいません。そして、これをより簡単に理解し、私を助けてくれる人たちの頭痛の種を減らすために、より具体的にできるかどうか教えてください.

どうもありがとう!

4

3 に答える 3

2

SUMを使用して、条件付きが必要になりますCASE

あなたのデータベースの構文は正確にはわかりませんが、次のようなものです:

, 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'
于 2013-08-30T18:55:25.773 に答える