我有一个查询来提取数据并将其分组到:
Date Type Total
3/1/2016 Sales 9
3/1/2016 Support 8
3/1/2016 Service 5
3/1/2016 Other 48
3/2/2016 Sales 42
3/2/2016 Support 86
3/2/2016 Service 67
3/2/2016 Other 25
3/2/2016 VIP 12
3/3/2016 Sales 46
3/3/2016 Support 45
3/3/2016 Service 78
3/3/2016 Other 70
3/3/2016 VIP 26
我也希望包括滚动平均值。因此,对于2016年3月1日的销售,滚动平均值将是前几周的10个。基本上:
select average(Total) where Date in ('2/23/2016','2/16/2016','2/9/2016','2/2/2016','1/26/2016','1/19/2016','1/12/2016','1/5/2016','12/29/2015','12/22/2015') and Type = "Sales"
有没有办法在1个查询中有效地执行此操作?
答案 0 :(得分:1)
使用类似的东西:
class Grade {
let string = PostViewController.sharedPost
var newString : String!
...
init() {
newString = self.string.postText.text
答案 1 :(得分:0)
考虑以下内容,您可以将查询放在内部和外部查询的Qry
占位符中。或者,您可以将子查询与原始查询内联。所有10个每周日期都在IN()
子句中明确指定,因为您只需要相对于行的相应日期的那些选择日期(即星期二,星期三)。
SELECT dT.Date, dT.Type, dT.Total,
(SELECT Avg(sub.Total)
FROM Qry sub
WHERE sub.Date IN
(DateAdd(d, -7, dT.Date),
DateAdd(d, -14, dT.Date),
DateAdd(d, -21, dT.Date),
DateAdd(d, -28, dT.Date),
DateAdd(d, -35, dT.Date),
DateAdd(d, -42, dT.Date),
DateAdd(d, -49, dT.Date),
DateAdd(d, -56, dT.Date),
DateAdd(d, -63, dT.Date),
DateAdd(d, -70, dT.Date))
AND sub.Type = dT.Type) As RollAvg
FROM Qry dT
答案 2 :(得分:0)
我最终选择了临时表 首先我创建了一个#TempTotal
Select Date, DATENAME(dw,Date) as DayName, Type, Count(*) as Total
INTO #TempTotal
From tbl
Where Date >=@StartDate and Date <= @EndDate
Group by Date, DayName, Type
然后我创建了#TempAverage:
Select DayName, Type, avg(Total)
INTO #TempAverage
from
(
select Date, DATENAME(dw,Date) as DayName, Type, Count(*) as Total
from tbl
where Date >=DateAdd(d, -70, @StartDate) and Date <= @StartDate
Group by Date, DayName, Type
) Totals
Group by DayName, Type
最后,我们有一个简单的加入
Select TT.Date, Type, TT.Total, TA.Average
FROM
#TempTotal TT
Left Join #TempAverage TA on TA.DayName = TT.DayName and TA.Type= TT.Type