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');

我对代码所做的简要说明:

我为每个连接创建了一个视图,即第一个、第二个、第三个等,如下所示:(我没有选择 UNION 来组合所有查询的原因是因为我希望结果按列显示而不是比行。)

create view firstview as 
SELECT  DATE(Timedetail) as Datefield1 ,
       count(Timedetail) as firstoccurances,
         Events  
FROM Mydatabase  
WHERE Events = "first" GROUP BY Datefield1 ;

对于第二个、第三个和所有其他事件也是如此。

这是我从视图中检索结果的方式:

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

现在,就第一个和第二个事件而言,我在“事件”列下为每个日期列出了“第一个”和“第二个”值。更准确地说,如果我使用 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

第二个事件也是如此。但是,对于“第三个”事件,情况就不一样了。我在“事件”列下仅列出了几个日期的“第三个”事件,例如 2013-07-02 和 2013-07-03,我应该看到以下内容输出:

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-07-02 和 2013-07-03 之外的所有其他日期值都在“第三个”事件列下填充值 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 回答