【发布时间】:2015-01-20 04:06:02
【问题描述】:
我有一个大数据可供选择。数据按小时计算。一天有 24 条记录,所以一个月有 24 * 30 = 720 条记录。这仅适用于一组,我在表中有 3 组。假设 A、B 和 C 组。因此一个月的总数为 720 * 3 = 2,160 条记录。
数据自 2008 年开始运行。
目前,我必须计算该表中一个字段的总数。现在假设表名是“oTable”。我有以下 t-sql:
;WITH ff AS (
SELECT GroupCode,
DateAdd(hh,-1,DateAdd(hh,DatePart(hh,myTime),myDate)) AS newDate, Value
FROM oTable
)
SELECT GroupCode, CAST(newDate AS DATE) AS MainDate, SUM(Value)
FROM ff
GROUP BY GroupCode, CAST(newDate AS DATE)
它将计算第二天 01:00:00 到 00:00:00 的值。它将提供每日基础数据。
为了防止加载大量数据,我正在使用这个 t-sql:
--=========================================
DECLARE @date DATE;
DECLARE @MonthID int = 3;
DECLARE @Year int = 2014;
SELECT @date = Cast (CONVERT(VARCHAR(4), @Year) + '-' + CONVERT(VARCHAR(2), @MonthID) + '-01' AS DATE)
SELECT GroupCode, myDate, myTime, Value
INTO #TempTable
FROM oTable
WHERE myDate BETWEEN Dateadd(day, -1, @date) AND Dateadd(day, 1, Dateadd(day, -Day(@date), Dateadd(month, 1, @date)))
;WITH ff AS (
SELECT GroupCode,
DateAdd(hh,-1,DateAdd(hh,DatePart(hh,myTime),myDate)) AS newDate, Value
FROM #TempTable
)
SELECT GroupCode, CAST(newDate AS DATE) AS MainDate, SUM(Value)
FROM ff
GROUP BY GroupCode, CAST(newDate AS DATE)
--========================================
我的问题是,我想从参数计算从年初开始的“价值”总数。比方说,参数是@monthid = '3' 和@year = '2014'...我需要知道从 2014 年 1 月到 2014 年 3 月的总价值。
有人知道怎么做吗?如果我没有使用上面的脚本(以防止加载大量数据),这很容易,但速度极慢。
谢谢。
【问题讨论】:
标签: sql sql-server sql-server-2008-r2