一尘不染

如何在SQL中按时间分组

sql

我正在使用2个步骤的应用程序。

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

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

数据库中的每一行都包含一些信息,例如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月1日,数据库中有3行,其中Type = TDBError。截至2012年10月2日,共有12个,等等。

我应该如何为此编写SQL?


阅读 210

收藏
2021-03-08

共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];
2021-03-08