functions avg sql sql-server group-by aggregate

avg - sum sql



Grupo SQL por día, con conteo. (6)

¿Qué proveedor de base de datos está utilizando? Sea cual sea, reemplace el "DateOnly (LogDate)" en la siguiente con la construcción apropiada para extraer la parte de la fecha (despojar la hora) del valor de la columna logdate y luego intente esto:

Select [DateOnly(LogDate)], Count Distinct RefundId From RefundProcessLog Group By [DateOnly(LogDate)]

En el servidor Sql, por ejemplo, la construcción apropiada sería:

Select DateAdd(day, 0, DateDiff(day, 0, LogDate)), Count(Distinct RefundId) From RefundProcessLog Group By DateAdd(day, 0, DateDiff(day, 0, LogDate))

Tengo una tabla de registro en SQL Server que se ve así:

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

Lo que quiero es una lista de resultados que represente la cantidad de reembolsids diferentes que se procesaron cada día, eliminando cualquier NULL.

¿Qué SQL necesitaría escribir para producir estos resultados?


En SqlServer, sería algo como:

select datepart(YEAR, [LogDate]), datepart(MONTH, [LogDate]), datepart(DAY, [LogDate]), count(refundid) as [Count] from [RefundProcessing] group by datepart(YEAR, [LogDate]), datepart(MONTH, [LogDate]), datepart(DAY, [LogDate])


Me gusta este enfoque en (MS SQL):

SELECT Convert(char(8), LogDate, 112), count(distinct RefundId) FROM RefundProcessing GROUP BY Convert(char(8), LogDate, 112)


SELECT COUNT(RefundId), DateOnly(LogDate) LoggingDate FROM RefundProcessLog GROUP BY DateOnly(LogDate)

"DateOnly" es específico de su base de datos SQL, que no ha especificado.

Para SQL Server puede usar DateAdd (dd, 0, DateDiff (dd, 0, LogDate)) para "DateOnly"


Select count(*), LogDate, refundid from RefundProcessLog where refundid is not null group by LogDate, refundid

Editar:

O descarte RefundID si no desea que se desglosen por reembolsos


select cast(LogDate as date) as LogDate, count(refundId) as refundCount from yourTable group by cast(LogDate as date)

Dependiendo del dialecto de SQL que esté utilizando, es posible que deba cambiar el CAST a otra cosa. La expresión debe convertir el LogDate a un valor de solo fecha.

Además, si dice "refundId diferente" porque podría haber valores repetidos de refundId que solo desea contar una vez, use count (DISTINCT refundId)