请考虑以下代码进行测试:
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 to 2013年8月1日
现在,就第一和第二个事件而言,我在EVENTS列下的每个日期都列出了“第一”和“第二”值。成为 更精确的是,如果我使用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 事件栏。我可以知道为什么吗?
答案 0 :(得分: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;