21

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

私が欲しいのは、毎日処理されたさまざまな払い戻し ID の数を表す結果のリストで、NULL はすべて破棄されます。

これらの結果を生成するには、どのような SQL を記述する必要がありますか?

4

7 に答える 7

49

私は(MS SQL)のこのアプローチが好きです:

SELECT 
  Convert(char(8), LogDate, 112),
  count(distinct RefundId)
FROM RefundProcessing
GROUP BY Convert(char(8), LogDate, 112)
于 2009-09-22T16:52:54.870 に答える
21
select cast(LogDate as date) as LogDate, count(refundId) as refundCount
from yourTable
group by cast(LogDate as date)

使用している SQL の方言によっては、CAST を別のものに変更する必要がある場合があります。式は、LogDate を日付のみの値に変換する必要があります。

また、1回だけカウントしたいrefundIdの値が繰り返される可能性があるため、「別のrefundId」と言う場合は、count(DISTINCT rejectId) を使用します。

于 2009-09-21T15:26:24.463 に答える
7

どのデータベース ベンダーを使用していますか? どちらであっても、次の「DateOnly(LogDate)」を適切な構造に置き換えて、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))
于 2009-09-21T15:25:10.550 に答える
1
SELECT COUNT(RefundId), DateOnly(LogDate) LoggingDate
FROM RefundProcessLog
GROUP BY DateOnly(LogDate)

「DateOnly」は、指定していない SQL データベースに固有のものです。

SQL Server の場合、「DateOnly」に DateAdd(dd,0, DateDiff(dd,0,LogDate)) を使用できます

于 2009-09-21T15:25:14.477 に答える
0

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])
于 2009-09-21T15:24:28.103 に答える
-1
Select count(*), LogDate, refundid from RefundProcessLog
where refundid is not null
group by LogDate, refundid

編集:

または、払い戻しごとに分割したくない場合は、RefundID をドロップします

于 2009-09-21T15:23:28.037 に答える