1

機器のオンとオフの日付/時刻のリストを保持するテーブルがあります。これは次のように保持されます。

date-time   |  equipment id  | state (1 or 0)

機器が稼働していた時期を線またはバーとして表示するタイムラインを作成しようとしています。私はSQLの経験がないので、これにアプローチする方法がわかりません。次の状態変化の開始を使用して終了日/時刻を作成しようとすることもできますが、これが MySQL で可能かどうかはわかりません。クエリされたリストだけを使用してExcelでこれを実行しようとしましたが、単一の日付/時刻ポイントとしてのみプロットされます。ある程度の期間は必要だと思います。進め方がわかりません。アドバイスや指針をいただければ幸いです。

4

1 に答える 1

1
CREATE TABLE `status` (
  `id` int(11) DEFAULT NULL,
  `date` datetime DEFAULT NULL,
  `state` int(11) DEFAULT NULL
)


set @last_date = NULL;
select @last_date as start_date,
  date as end_date,
  case when state = 1 then @last_date := date end as ignore_me,
  case when state = 0 then (unix_timestamp(date) - unix_timestamp(@last_date)) / 60 end as duration
from status
where id = 1
order by date

次のような出力が得られます。

+---------------------+---------------------+---------------------+----------+
| start_date          | end_date            | ignore_me           | duration |
+---------------------+---------------------+---------------------+----------+
| 2012-11-20 01:16:00 | 2012-11-20 01:00:00 | 2012-11-20 01:00:00 |     NULL |
| 2012-11-20 01:00:00 | 2012-11-20 01:15:00 | NULL                |  15.0000 |
| 2012-11-20 01:00:00 | 2012-11-20 01:16:00 | 2012-11-20 01:16:00 |     NULL |
| 2012-11-20 01:16:00 | 2012-11-20 01:20:00 | NULL                |   4.0000 |
+---------------------+---------------------+---------------------+----------+

優れた持続時間を持つ行だけを取ります:

select * from (
  ...
) foo
where duration is not null

+---------------------+---------------------+-----------+----------+
| start_date          | end_date            | ignore_me | duration |
+---------------------+---------------------+-----------+----------+
| 2012-11-20 01:00:00 | 2012-11-20 01:15:00 | NULL      |  15.0000 |
| 2012-11-20 01:16:00 | 2012-11-20 01:20:00 | NULL      |   4.0000 |
+---------------------+---------------------+-----------+----------+
于 2012-11-20T19:31:37.873 に答える