表有3列:Category, Value(int), Date
我想要的SQL查询要做的是检查属于特定类别的每条记录,如果该值位于特定的公差范围内(例如t)的平均值超过过去100条记录,这些记录具有相同的工作日(星期一,星期二等)和相同的类别作为有关记录。
我能够部分地实现这一点,因为我事先知道类别,但是工作日取决于查询的记录。此外,目前我只是检查值是否大于平均值,而不是检查它是否在某个公差范围内。
SELECT Value, Date,
CASE WHEN
value > (SELECT AVG(value) FROM Table WHERE Category = 'CategoryX' and Date BETWEEN current_date - 700 and current_date - 1) THEN 1
ELSE 0
END AS check_avg
FROM Table
WHERE Category = 'CategoryX'
示例:
<表类> 类别价值日期 tbody><<tr>CategoryX 5000 2022-06-29 CategoryX 4500 2022-06-27 CategoryX 1000 2022-06-22 CategoryY 4500 2022-06-15 CategoryX 2000 2022-06-15 CategoryX 3000 2022-06-08 表类>
验证在两个查询中您正在评估相同的类别和相同的工作日。然后对将用于按日期计算平均值的值进行排序,只获取最近的前100条记录。最后,检查电流值与平均值之间的差值是否低于公差区间epsilon。
SELECT Value, Date,
CASE WHEN
ABS(value - (SELECT AVG(Value) FROM (SELECT TOP 100 Value FROM Table WHERE Category = t.Category and DATEPART(WEEKDAY, Date)=DATEPART(WEEKDAY, t.Date) AND Date <= t.Date ORDER BY Date DESC ))) < epsilon THEN 1
ELSE 0
END AS check_avg
FROM Table t
WHERE Category = 'CategoryX'