1

私はSQLを初めて使用し、ここで問題に直面しています。私は自分が何をする必要があるかは理解していると思いますが、その構文は理解していません。基本的に、私は時間ごとに大量のカウントを持っているので、それらすべての時間ごとのカウントを取得し、それらを結合して、時間単位ではなく日単位で表示してから、全日数の平均を取得する必要があります。また、これらの日のどれが平日であるかを分類し、週末を除外する必要がありました...これは正しく行ったと思いますが、これについては間違っている可能性があります。より効率的な方法がある場合は、お知らせください。

  SELECT DatePart(WEEKDAY, [EVENT_TIME]) as DayoftheWeek
,[EVENT_TIME]
,[COUNT]
,[CLASS_SCHEME_ID]
,[CLASS_NUM]
,[ERROR_CODE]
,[REC_ENTRY_TIME]
FROM [SAMPLE_DATA].[dbo].[651511]
WHERE [EVENT_TIME] >= '2009-01-01' AND DatePart(WEEKDAY, [EVENT_TIME]) >=2 AND DatePart(WEEKDAY, [EVENT_TIME]) <= 6
GROUP BY ,[EVENT_TIME]
,[COUNT]
,[CLASS_SCHEME_ID]
,[CLASS_NUM]
,[ERROR_CODE]
,[REC_ENTRY_TIME]
GO

私は私がする必要があるかもしれないことについて読んでいます...多分キャストについて何か?わからない。

4

1 に答える 1

1

Day(つまりクラス)よりも低い粒度が必要かどうかはわかりませんが、そうでない場合は、これで十分だと思います。結果をより細かくしたい場合は、これらのフィールドをselectとgroupbyの両方に追加します。

これは、@@DateFirstのデフォルト以外の設定も考慮に入れます。

SELECT
    DatePart(Weekday, event_time) as DayName,
    avg(count) as DayAvg
FROM
    sample_date.dbo.651511
WHERE 
    event_time >= '2009-01-01' and
    (DATEPART(dw, date_created) + @@DATEFIRST) % 7) NOT IN (0, 1)
Group by
    DatePart(Weekday, event_time)
于 2013-03-04T05:31:35.400 に答える