テスト目的で次のコードを検討してください。
CREATE TABLE Mydatabase(
TableID_bi int,
EVENTS VARCHAR(200),
email VARCHAR(200),
Timedetail DATETIME
);
INSERT INTO `Mydatabase` (`TableID_bi`,`EVENTS`, `email`, `Timedetail`) VALUES
(1, 'first','email@gmail.com','2013-06-15' ),
(2, 'first','email2@gmail.com', '2013-06-15'),
(3, 'second','email3@gmail.com', '2013-06-15'),
(4, 'second','email4@gmail.com', '2013-06-15'),
(5, 'third','email5@gmail.com', '2013-06-15');
私がコードで行ったことの簡単な説明:
次のように、最初、2番目、3番目などの各接続のビューを作成しました:(すべてのクエリをクラブするためにUNIONを選択しなかった理由は、結果を列ごとに表示したいからです。行より。)
create view firstview as
SELECT DATE(Timedetail) as Datefield1 ,
count(Timedetail) as firstoccurances,
Events
FROM Mydatabase
WHERE Events = "first" GROUP BY Datefield1 ;
2 番目、3 番目、および他のすべてのイベントについても同様です。
ビューから結果を取得する方法は次のとおりです。
SELECT a.Datefield1
a.firstoccurances,
b.secondoccurances,
c.thirdoccurances
FROM firstview a,
secondview b,
thirdview c
WHERE a.Datefield1 = b.Datefield2
AND a.Datefield1 = c.Datefield3
データベースで何が起こっているかについての簡単な説明:
上記と同じ種類の大規模なデータベースに取り組んでいます。たとえば、データベースから次の日付範囲を選択しました: 2013-07-01 から 2013-08-01
ここで、1 番目と 2 番目のイベントに関する限り、EVENTS 列の下にすべての日付の「1 番目」と「2 番目」の値がリストされています。より正確には、COUNT() 関数を使用してテストすると、次のような結果が得られます。
最初の接続の場合:
TimeDetail | Number of first events
2013-07-01 4
2013-07-02 2
2013-07-03 6
and so on
2013-08-01 5
2回目のイベントも同様です。ただし、「3 番目の」イベントでは、同じではありません。たとえば、2013-07-02 と 2013-07-03 のように、いくつかの日付についてのみ [イベント] 列に「3 番目の」イベントがリストされており、次のように表示されます。出力:
TimeDetail | Number of third events
2013-07-01 0
2013-07-02 1
2013-07-03 2
and so on
2013-08-01 0
しかし、私は上記の出力を得ていません。代わりに、2013 年 7 月 2 日と 2013 年 7 月 3 日を除く他のすべての日付値は、「3 番目のイベント数」列の下に値 1 で埋められます。理由がわかりますか?