请考虑以下代码进行测试:
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。我可以知道为什么吗?