Mysql SQL基于日期范围创建新的每日表

Mysql SQL基于日期范围创建新的每日表,mysql,sql,Mysql,Sql,我有以下疑问: root@localhost [hatsize]> SELECT COUNT(*) AS C,EventID,Start,End,sysname FROM complete_ev WHERE type = 's' AND EventID = 6881; +----+---------+---------------------+---------------------+---------+ | C | EventID | Start | E

我有以下疑问:

root@localhost [hatsize]> SELECT COUNT(*) AS C,EventID,Start,End,sysname  FROM complete_ev WHERE type = 's' AND EventID = 6881;
+----+---------+---------------------+---------------------+---------+
| C  | EventID | Start               | End                 | sysname |
+----+---------+---------------------+---------------------+---------+
| 26 |    6881 | 2013-09-09 12:00:00 | 2013-09-13 22:00:00 | sv-esx4 |
+----+---------+---------------------+---------------------+---------+
我想用Count、EventID和sysname创建一个新表,但我希望日期为daily,例如:

 26 6881   2013-09-09  sv-esx4
 26 6881   2013-09-10  sv-esx4
 26 6881   2013-09-11  sv-esx4
 26 6881   2013-09-12  sv-esx4
 26 6881   2013-09-13  sv-esx4
谁能告诉我怎么做?我试过一些方法,但没有找到正确的公式。
谢谢。

您需要一个日期范围的驱动程序表(您可以使用子查询或CTE,但一个完整的表是值得的)。就性能而言,创建日历表是实现这一点的最佳方法。如果需要,您可以找到大量的固定SQL脚本来创建日历表。此资源将随时派上用场,因此它非常值得进行所需的最小设置工作。假设您有一个日历表,则可以执行以下操作:

SELECT allEvents.totalCount AS C,
  ev.EventID,
  CAST(c.Date AS Date) AS date,
  ev.sysname  
FROM complete_ev ev
RIGHT JOIN calendar c ON c.Date BETWEEN ev.Start AND ev.End
INNER JOIN (SELECT COUNT(EventID) AS totalCount, EventID FROM complete_ev GROUP BY EventID) AS allEvents ON ev.EventID = allEvents.eventID
WHERE ev.type = 's' 
  AND ev.EventID = 6881;

事实上,这就是票。祝你好运。

我现在正在重读这篇文章,我认为你的要求中有一个不明确的部分。您是否在寻找每天的EventID 6881总数,而不是每天的event 6881总数?这将为每行生成相同的计数。这是你需要的吗?这与我下面的答案不同(尽管如果我读对了,下面的答案将是解决方案的一部分)。是的,抱歉。我每天需要总共6881个事件。所以一个相同的行,每个EventID没有每天的变化,我只想有一个每日计数。我终于拼凑出了需求。您需要在一行上创建一个开始日期和结束日期之间的无间隙日期列表。这一部分值得注意。谢谢,最后需要一个分组。对问题中缺乏细节表示歉意。