这个问题不清楚,但在实时情况,我们提取的月平均,这里是某种形式的解决方案我做的(假设这是对MS SQL服务器):
DECLARE @YourTable Table([DateCol] DATETIME, [Actual] NUMERIC(10,2), [Planned] NUMERIC(10,2))
INSERT INTO @YourTable ([DateCol], [Actual], [Planned])
VALUES
('01-05-2016 07:00:01',3.1,2.7),
('01-05-2016 19:00:01',2.9,2.7),
('03-05-2016 07:00:01',3.2,2.7),
('03-05-2016 07:00:01',3.4,2.7),
('05-06-2016 07:00:01',3.2,2.7),
('07-06-2016 07:00:01',2.6,2.7),
('07-06-2016 07:00:01',3.2,2.7)
DECLARE @begin DATETIME,
@End DATETIME
SELECT @begin = MIN([DateCol]), @End = MAX([DateCol])
FROM @YourTable
-- For Monthly avg.
SET @begin = DATEADD(MONTH, DATEDIFF(MONTH,0,@begin),0)
SET @End = DATEADD(DAY,-1,DATEADD(MONTH, DATEDIFF(MONTH,0,@End),0))
--SELECT @begin,@End
;WITH Months
AS
(
SELECT @begin DateRange
UNION ALL
SELECT DATEADD(MONTH,1,DateRange)
FROM Months
WHERE DateRange < @End
)
SELECT m.DateRange, DATEADD(DAY,-1,DATEADD(MONTH, DATEDIFF(MONTH,0,m.DateRange)+1,0)) [DateRangeEnd],AVG([Actual]) [AvgActual],AVG([Planned]) [AvgPlanned]
FROM @YourTable y
INNER JOIN Months m
ON y.DateCol BETWEEN m.DateRange AND DATEADD(DAY,-1,DATEADD(MONTH, DATEDIFF(MONTH,0,m.DateRange)+1,0))
GROUP BY m.DateRange,DATEADD(DAY,-1,DATEADD(MONTH, DATEDIFF(MONTH,0,m.DateRange)+1,0))
我做@Begin和@End为我的报告参数,以便用户可以取消范围。
哪个dmbs和您使用的是哪个版本? – Nebi