我正在在MSSQL存储过程中,我想我的结果由间隔一天,我不确定组,如果这是正确的,但:如何在特定时间间隔内正确地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
字段,我想按日间隔执行GROUP BY
。
感谢
编辑: 这是正确的做法,一个简单的格式交换......有时我需要更多的咖啡。
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)
因此,在本质查询被正确地匹配起来,并使用新的格式。
你的测试数据产生了什么? – 2012-01-10 01:21:10