0

我有以下查询:

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 创建一个新表,但我希望日期是每天,例如:

 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

谁能告诉我我该怎么做?我尝试了一些东西,但没有想出正确的公式。谢谢。

4

1 回答 1

1

您需要一个针对您要查找的日期范围的驱动程序表(您可以使用子查询或 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;

这实际上是门票。祝你好运。

于 2013-09-28T18:43:14.843 回答