我使用以下SQL(SQL Server 2005)来计算每列的总时间:
DECLARE @Param1 DATETIME
DECLARE @Param2 DATETIME
DECLARE @Param3 DATETIME
SET @Param1 = '2009-01-01'
SET @Param2 = '2009-09-09'
SELECT SUM(IdleSec) AS TotalIdleSec,
SUM(ProductionSec) AS TotalProductionSec,
SUM(UplineSec) AS TotalUplineSec,
SUM(DownlineSec) AS TotalDownlineSec,
SUM(UserSec) AS TotalUserSec
FROM Job
WHERE (DateTime >= dbo.FormatDateTime(@Param1, 'yyyy-mm-dd'))
AND
(DateTime < dbo.FormatDateTime(@Param2, 'yyyy-mm-dd'))
GO
这会为上面的项目返回一个包含 1行的表,效果很好。
我有点不确定如何以每天/每周/每月的SUM值返回表格 即。
日期范围内每个日期的所有值的总和。
日期范围内每个WEEK的所有值的总和。
日期范围内每个MONTH的所有值的总和。
我确信有一种简单的方法可以做到这一点,但不确定自己。我看过一些使用DAY(日期)命令的教程,但我尝试过,似乎无法得到我需要的东西。
我期待着您的出色帮助。
答案 0 :(得分:2)
您需要一张日期为
的表格DECLARE @StartDate DATETIME,
@EndDate DATETIME
SELECT @StartDate = '01 Sep 2009',
@EndDate = '09 Sep 2009'
DECLARE @RunDate DATETIME
SELECT @RunDate = @StartDate
DECLARE @DayTable TABLE(
DayDate DATETIME
)
WHILE @RunDate <= @EndDate
BEGIN
INSERT INTO @DayTable (DayDate) SELECT @RunDate
SET @RunDate = @RunDate + 1
END
SELECT * FROM @DayTable
然后将查找表连接到此表,并按日期表中的日期分组。
这应该为您提供每日价值
然后你需要为每周值做同样的事情。这将为您提供所有日子,即使该日期没有统计数据
答案 1 :(得分:1)
您可以在查询中添加GROUP BY子句:
MONTH:SELECT SUM(IdleSec) AS TotalIdleSec,
SUM(ProductionSec) AS TotalProductionSec,
SUM(UplineSec) AS TotalUplineSec,
SUM(DownlineSec) AS TotalDownlineSec,
SUM(UserSec) AS TotalUserSec,
DATEPART(year, DateTime) as Year,
DATEPART(month, DateTime) as Month
FROM Job
WHERE (DateTime >= dbo.FormatDateTime(@Param1, 'yyyy-mm-dd'))
AND
(DateTime < dbo.FormatDateTime(@Param2, 'yyyy-mm-dd'))
GROUP BY DATEPART(year, DateTime),
DATEPART(month, DateTime);
WEEK :
SELECT SUM(IdleSec) AS TotalIdleSec,
SUM(ProductionSec) AS TotalProductionSec,
SUM(UplineSec) AS TotalUplineSec,
SUM(DownlineSec) AS TotalDownlineSec,
SUM(UserSec) AS TotalUserSec,
DATEPART(year, DateTime) as Year,
DATEPART(week, DateTime) as Week
FROM Job
WHERE (DateTime >= dbo.FormatDateTime(@Param1, 'yyyy-mm-dd'))
AND
(DateTime < dbo.FormatDateTime(@Param2, 'yyyy-mm-dd'))
GROUP BY DATEPART(year, DateTime),
DATEPART(week, DateTime);
by DAY:
SELECT SUM(IdleSec) AS TotalIdleSec,
SUM(ProductionSec) AS TotalProductionSec,
SUM(UplineSec) AS TotalUplineSec,
SUM(DownlineSec) AS TotalDownlineSec,
SUM(UserSec) AS TotalUserSec,
DATEPART(year, DateTime) as Year,
DATEPART(dayofyar, DateTime) as Day
FROM Job
WHERE (DateTime >= dbo.FormatDateTime(@Param1, 'yyyy-mm-dd'))
AND
(DateTime < dbo.FormatDateTime(@Param2, 'yyyy-mm-dd'))
GROUP BY DATEPART(year, DateTime),
DATEPART(dayofyear, DateTime);
对于DAY,还有其他选项,例如使用CAST提取日期部分或您似乎拥有的FormatDateTime函数。我使用DATEPART来保持一致性。
答案 2 :(得分:0)
查看DATEDIFF命令,这可以为您提供两个日期之间的天数/周/月/年等数字。