2016-05-16 11 views
-4

安定したタイムラインを持つ動的チャートを生成しようとしているので、x軸にさらに時間(分)を追加する必要があります。 2列が必要です。列1(時間)は、00:00から23:59の時間列を単純に列挙した表から1日の1分を示しています(この例の表は20分しかありません)。私はこれを 'ログ'テーブルの結果と結合しようとしています。クエリは、私が見ているマシンの名前、たとえばMachine 'name' '1'をフィルタリングします。次に、このマシンが 'TimeMins'テーブルから1440分に沿って状態を変更したときに一覧表示します。私はそれが助けてくれることを望みます 最終的には、マシンの状態変化を1日中表示する動的なグラフがあります。 「時間」の列はグラフのx軸を定常的なタイムラインに設定しますLeft Joinの時間 - MYSQL

残念ながら、私は正しく参加することができません。たぶん、別の方法がありますか、誰かが問題を解き放つことができますか?

結果は、その分のために「ログイン」やないで結果があったかどうか、など

time  state 
00:00  null (or zero) 
00:01  null 
00:02  1 
00:03  null 
00:04  null 
00:05  0 
00:06  null 
00:07  1 

...一日の毎分の値のようになります。

非常に高く評価されています。これを2日間以上行ったことがありますか?ここで

はSQLfiddleです:

http://sqlfiddle.com/#!9/5f91a0/2

感謝。 Jamie。

+0

私は編集しましたが、ページが更新されませんでした。 2列。 「時間」と「状態」。ありがとう。 –

+0

ストロベリー下記のコメントをご覧ください。あなたの助けは大変感謝しています。 –

+0

十分に良い。ありがとう、それを編集しました。 –

答えて

0

インナーセレクトを使用できます。例では

私は第二のスタートを提供し、第一は、第二をラップしているとそれだけで各実行のために秒を計算していますマシンごとに

を終了している3

select name, beginning, ending - beginning as seconds from (
    select a.name, a.ts as beginning, (
    select min(b.ts) 
    from log b 
    where b.ts > a.ts and a.name = b.name and b.state = 0 
) as ending 
    from log a 
    where a.state = 1 
) c 
order by beginning; 

を使用しています怒鳴ると、結果をソートa.tsが

(同じマシンに一致するように)同じ名前で開始し、状態0の後にマシンが停止したときに開始

により第三は、次の行を検索しようとしています3210

select min(b.ts) 
    from log b 
    where b.ts > a.ts and a.name = b.name and b.state = 0 

http://sqlfiddle.com/#!9/5f91a0/14

+0

リチャードに感謝しますが、それは私が探しているものではありません。私の貧しい説明。私は2列必要です。列1(時間)は、00:00から23:59までの時間列を単純に持つテーブルから、1分の1分を表示します。私はこれを 'ログ'テーブルの結果と結合しようとしています。クエリは、私が見ているマシンの名前、たとえば '1'をフィルタリングします。次に、このマシンが 'TimeMins'テーブルから1440分に沿って状態を変更したときに一覧表示します。私はそれが助けてくれることを望みます –

+0

最終的には、マシンの状態変化を一日を通して示す動的なグラフがあります。 「時間」列はグラフのx軸を設定し、安定したタイムラインを与えます。 –

0

私は

...(とこの方法でも、このクエリを書くのより最適な方法がきっとあります)解決策として、これを提唱していないんだけど、単に例示のために
DROP TABLE IF EXISTS `log`; 
CREATE TABLE `log` (
    `id` int(11) NOT NULL AUTO_INCREMENT, 
    `name` varchar(16) DEFAULT NULL, 
    `ts` datetime NOT NULL, 
    `state` tinyint(1) DEFAULT NULL, 
    PRIMARY KEY (`id`) 
); 

INSERT INTO `log` VALUES 
(20,1,'2016-05-16 00:03:02',1), 
(21,1,'2016-05-16 00:04:03',0), 
(22,2,'2016-05-16 00:04:28',1), 
(23,2,'2016-05-16 00:06:45',0), 
(25,1,'2016-05-16 00:14:50',1), 
(26,2,'2016-05-16 00:15:35',1); 

DROP TABLE IF EXISTS `TimeMins`; 

CREATE TABLE `TimeMins` (
t time PRIMARY KEY 
); 

INSERT INTO `TimeMins` VALUES 
('00:00:00'), 
('00:01:00'), 
('00:02:00'), 
('00:03:00'), 
('00:04:00'), 
('00:05:00'), 
('00:06:00'), 
('00:07:00'), 
('00:08:00'), 
('00:09:00'), 
('00:10:00'), 
('00:11:00'), 
('00:12:00'), 
('00:13:00'), 
('00:14:00'), 
('00:15:00'), 
('00:16:00'), 
('00:17:00'), 
('00:18:00'), 
('00:19:00'), 
('00:20:00'); 

SELECT a.* 
    , b.id 
    , b.name 
    , b.state 
    FROM 
    (SELECT DISTINCT CONCAT(DATE(l.ts),' ',t.t) i 
        FROM log l 
        , timemins t 
    ) a 
    LEFT 
    JOIN log b 
    ON DATE_FORMAT(b.ts,'%Y%m%d%h%i') = DATE_FORMAT(a.i,'%Y%m%d%h%i'); 
+---------------------+------+------+-------+ 
| i     | id | name | state | 
+---------------------+------+------+-------+ 
| 2016-05-16 00:00:00 | NULL | NULL | NULL | 
| 2016-05-16 00:01:00 | NULL | NULL | NULL | 
| 2016-05-16 00:02:00 | NULL | NULL | NULL | 
| 2016-05-16 00:03:00 | 20 | 1 |  1 | 
| 2016-05-16 00:04:00 | 21 | 1 |  0 | 
| 2016-05-16 00:04:00 | 22 | 2 |  1 | 
| 2016-05-16 00:05:00 | NULL | NULL | NULL | 
| 2016-05-16 00:06:00 | 23 | 2 |  0 | 
| 2016-05-16 00:07:00 | NULL | NULL | NULL | 
| 2016-05-16 00:08:00 | NULL | NULL | NULL | 
| 2016-05-16 00:09:00 | NULL | NULL | NULL | 
| 2016-05-16 00:10:00 | NULL | NULL | NULL | 
| 2016-05-16 00:11:00 | NULL | NULL | NULL | 
| 2016-05-16 00:12:00 | NULL | NULL | NULL | 
| 2016-05-16 00:13:00 | NULL | NULL | NULL | 
| 2016-05-16 00:14:00 | 25 | 1 |  1 | 
| 2016-05-16 00:15:00 | 26 | 2 |  1 | 
| 2016-05-16 00:16:00 | NULL | NULL | NULL | 
| 2016-05-16 00:17:00 | NULL | NULL | NULL | 
| 2016-05-16 00:18:00 | NULL | NULL | NULL | 
| 2016-05-16 00:19:00 | NULL | NULL | NULL | 
| 2016-05-16 00:20:00 | NULL | NULL | NULL | 
+---------------------+------+------+-------+ 
+0

Strawberryありがとうございますが、あなたのソリューションは結果テーブルに結果を表示していないようです。結合された時間の間に分がありません。 –

+0

分が足りませんか? – Strawberry

+0

ストロベリー、それは非常に近いですが、結果は時間順ではありません。最初の行は00:03:00と表示されますが、00:00:00は最初に表示されます。私はあなたのコードを時間順に変更しようとしましたが、できませんでした。もう一度見てください。ありがとう。 –