間隔日で私の結果を私はMSSQLにストアドプロシージャを作っていますし、私はグループにしたい、私はわからないよ:特定の間隔でdatetime列を正しくGROUP BYする方法はありますか?これはしかし正しいかどう
(これは部分である)
INSERT @Results
(
[Day],
[Month],
[Year],
[Result]
)
SELECT
DATEPART(DD, DATEADD(MI, @GmtOffset, EventDate)),
DATEPART(MM, DATEADD(MI, @GmtOffset, EventDate)),
DATEPART(YY, DATEADD(MI, @GmtOffset, EventDate)),
Result = CASE WHEN @Metric = 'Take Rate' THEN NULL ELSE COUNT(*) END
FROM BundleEvent
WHERE BundleEventTypeId = CASE WHEN @Metric = 'Take Rate' THEN @TypeTakeId ELSE @BundleEventTypeId END
AND EventDate >= @StartTime AND EventDate <= @EndTime
GROUP BY
DATEPART(YY, DATEADD(MI, @GmtOffset, EventDate)),
DATEPART(MM, DATEADD(MI, @GmtOffset, EventDate)),
DATEPART(DD, DATEADD(MI, @GmtOffset, EventDate))
私の恐怖最終的には、年または月が重要でない日までにデータをグループ化することになります。私はこれを正しくしているかどうか誰にも知っていますか? EventDate
はDateTime
フィールドであり、1日の間隔でGROUP BY
を実行します。
おかげ
EDIT: これは正しい方法、簡単な形式の交換である...時々私はより多くのコーヒーを必要とします。
INSERT @Results
(
[Date],
[Result]
)
SELECT
CAST(DATEADD(MI, @GmtOffset, BundleEvent.EventDate) AS DATE),
Result = CASE WHEN @Metric = 'Take Rate' THEN 0 ELSE COUNT(*) END
FROM dbo.BundleEvent WITH (NOLOCK)
JOIN dbo.BundleUser WITH (NOLOCK)
ON BundleEvent.BundleId = BundleUser.BundleId
JOIN dbo.Bundle WITH (NOLOCK)
ON BundleEvent.BundleId = Bundle.BundleId
WHERE BundleEvent.EventDate >= @StartTimeGmt AND BundleEvent.EventDate <= @EndTimeGmt
AND BundleEvent.BundleEventTypeId = CASE WHEN @Metric = 'Take Rate' THEN @TypeTakeId ELSE @BundleEventTypeId END
AND BundleUser.UserId = CASE WHEN @UserId IS NULL THEN BundleUser.UserId ELSE @UserId END
AND Bundle.BundleType = 1
GROUP BY
CAST(DATEADD(MI, @GmtOffset, BundleEvent.EventDate) AS DATE)
それから私はフォーマット交換と比較し、サブの操作を行います。
CAST(
(SELECT COUNT(*)
FROM dbo.BundleEvent WITH (NOLOCK)
JOIN dbo.BundleUser WITH (NOLOCK)
ON BundleEvent.BundleId = BundleUser.BundleId
JOIN dbo.Bundle WITH (NOLOCK)
ON BundleEvent.BundleId = Bundle.BundleId
WHERE CAST(DATEADD(MI, @GmtOffset, BundleEvent.EventDate) AS DATE) = [Date]
AND BundleEvent.BundleEventTypeId = @TypeTakeId
AND BundleUser.UserId = CASE WHEN @UserId IS NULL THEN BundleUser.UserId ELSE @UserId END
AND Bundle.BundleType = 1)
AS DECIMAL(5,2)
だから、本質的には、クエリが正しく一致すると、新しい形式を使用しています。
あなたのテストデータは何を生成しますか? –