0

テスト目的で次のコードを検討してください。

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 で埋められます。理由がわかりますか?

4

1 に答える 1

1

問題を理解しているふりをすることはできませんが、これが解決策になる可能性があります...

SELECT timedetail
     , SUM(CASE WHEN events = 'first' THEN 1 ELSE 0 END) first 
     , SUM(CASE WHEN events = 'second' THEN 1 ELSE 0 END) second
     , SUM(CASE WHEN events = 'third' THEN 1 ELSE 0 END) third
  FROM mydatabase 
 GROUP 
    BY timedetail;
于 2013-08-20T11:57:07.550 に答える