Подтвердить что ты не робот

SQL group by day, с подсчетом

У меня есть таблица журналов в 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

То, что я хочу, это список результатов, которые представляют, сколько различных возвратов было обработано каждый день, выбрасывая любые NULL.

Какой SQL мне нужно написать для создания этих результатов?

4b9b3361

Ответ 1

Мне нравится этот подход в (MS SQL):

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

Ответ 2

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

В зависимости от диалекта SQL, который вы используете, вам может потребоваться изменить CAST на что-то еще. Выражение должно преобразовать значение LogDate в значение даты.

Кроме того, если вы скажете "different refundId", потому что могут быть повторные значения refundId, которые вы хотите подсчитать только один раз, используйте count (DISTINCT refundId)

Ответ 3

Какой поставщик базы данных вы используете? Какой бы он ни был, замените "DateOnly (LogDate)" следующим текстом на соответствующий construict, чтобы извлечь часть даты (отменить время) из значения столбца logdate, а затем попробуйте следующее:

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

В Sql-сервере, например, соответствующей конструкцией будет:

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

Ответ 4

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

"DateOnly" относится к вашей базе данных SQL, которую вы не указали.

Для SQL Server вы можете использовать DateAdd (dd, 0, DateDiff (dd, 0, LogDate)) для "DateOnly"

Ответ 5

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

Edit:

Или отмените RefundID, если вы не хотите, чтобы он был скомпенсирован возвратом средств

Ответ 6

В SqlServer это будет примерно так:

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])