如何在SQL中按时间分组

时间:2013-01-16 20:25:48

标签: sql sql-server

  

可能重复:
  SQL Query Group By Datetime problem?

我正在处理一个有两个步骤的应用程序。

  • 扫描日志并将数据保存在数据库中。
  • 从数据库中读取数据并可视化数据。

第一步或多或少完成。我尝试通过第二步解释背景和我的要求。

数据库中的每一行都包含一些信息,如logdate,logfilename,LogType,logMessage等。所以我想要编写SQL,每天总结一个给定的LogType。

这是列:

[LogDate] [datetime] NOT NULL,
[Computer] [varchar](50) NOT NULL,
[Type] [varchar](50) NOT NULL,
[FileName] [varchar](100) NOT NULL,
[LineNo] [int] NOT NULL,
[UserName] [varchar](50) NOT NULL,
[Message] [varchar](max) NOT NULL,

如果我想显示Type = TDBError:

的所有行,我想输出可能是这样的
Date        Sum
2012-10-01  3
2012-10-02  12
2012-10-03  40
2012-10-05  24
2012-10-06  18

因此,在2012-10-01日期,DB中有3行,其中Type = TDBError。在2012-10-02的日期有12个等。

我应该如何为此编写SQL?

4 个答案:

答案 0 :(得分:1)

GROUP BY DATEPART(日期,日期),DATEPART(月份,日期),DATEPART(年份,日期)

答案 1 :(得分:1)

假设SQL Server 2008或更新版本:

SELECT 
  [Date] = CONVERT(DATE, LogDate), 
  [Sum] = COUNT(*)
FROM dbo.Log_Table_Name
WHERE [Type] = 'DBError'
GROUP BY CONVERT(DATE, LogDate)
ORDER BY [Date];

答案 2 :(得分:1)

您可以按时间段进行分组

GROUP BY date(log_date), month(log_date), day(log_date)

答案 3 :(得分:1)

Select Cast(FLOOR(CAST(DATE as float)) as DateTime) as Date,COUNT(*) as [SUM]
from Log_Table_Name
Group by Cast(FLOOR(CAST(DATE as float)) as DateTime)
order by Cast(FLOOR(CAST(DATE as float)) as DateTime)