SQL group by day,with count

Chr*_*all 19 sql sql-server group-by aggregate

我在SQL Server中有一个如下所示的日志表:

CREATE TABLE [dbo].[RefundProcessLog](
 [LogId] [bigint] IDENTITY(1,1) NOT NULL,
 [LogDate] [datetime] NOT NULL,
 [LogType] [varchar](10) COLLATE SQL_Latin1_General_CP1_CI_AS NOT NULL,
 [RefundId] [int] NULL,
 [RefundTypeId] [smallint] NULL,
 [LogMessage] [varchar](1000) COLLATE SQL_Latin1_General_CP1_CI_AS NOT NULL,
 [LoggedBy] [varchar](50) COLLATE SQL_Latin1_General_CP1_CI_AS NOT NULL,
 CONSTRAINT [PK_RefundProcessLog] PRIMARY KEY CLUSTERED 
(
 [LogId] ASC
) ON [PRIMARY]
) ON [PRIMARY]

GO
Run Code Online (Sandbox Code Playgroud)

我想要的是一个结果列表,表示每天处理多少不同的退款,抛出任何NULL.

我需要编写什么SQL来生成这些结果?

sco*_*ttm 43

我喜欢(MS SQL)中的这种方法:

SELECT 
  Convert(char(8), LogDate, 112),
  count(distinct RefundId)
FROM RefundProcessing
GROUP BY Convert(char(8), LogDate, 112)
Run Code Online (Sandbox Code Playgroud)


Ste*_*ass 18

select cast(LogDate as date) as LogDate, count(refundId) as refundCount
from yourTable
group by cast(LogDate as date)
Run Code Online (Sandbox Code Playgroud)

根据您使用的SQL的方言,您可能必须将CAST更改为其他内容.该表达式应将LogDate转换为仅日期值.

此外,如果您说"不同的refundId",因为您可能只需要计算一次您的重复值refundId,请使用count(DISTINCT refundId)


Cha*_*ana 6

您使用的是哪个数据库供应商?无论它是什么,用以下相应的构造替换下面的"DateOnly(LogDate)"以从logdate列值中提取日期部分(剥去时间),然后尝试:

Select [DateOnly(LogDate)], Count Distinct RefundId
From RefundProcessLog
Group By [DateOnly(LogDate)]
Run Code Online (Sandbox Code Playgroud)

在Sql server中,例如,适当的构造将是:

Select DateAdd(day, 0, DateDiff(day, 0, LogDate)), Count(Distinct RefundId)
From RefundProcessLog
Group By DateAdd(day, 0, DateDiff(day, 0, LogDate))
Run Code Online (Sandbox Code Playgroud)