我是SQL的新手,我的数据在Access数据库(~50k行)中具有以下结构
State Year Date Price
CA 2012 1/2/13 5.00
NY 2013 1/2/13 6.00
NY 2013 1/7/13 7.00
A(州,年)对虽然在这里的不同栏中有所代表,却代表着一种年份(如葡萄酒)。因此,我们讨论“CA 2012”的价格如何在全年范围内发生变化。
由于我们将某些数据手动输入此数据库,因此存在错误的机会。我们想写一个标记任何可疑条目的查询以供进一步审查。
我已经阅读了很多关于这个问题的不同问题和主题,但是没有发现任何能解决我如何找到本地异常值的主要问题 - 价格可以上下移动,因此某些日期范围可能适用的价格可能是今年早些时候的异常值
更新:我将数据分成几个月的桶,因此找到局部异常值可能会更容易。我仍然在寻找可以在SQL中实现的良好异常检测方法。
答案 0 :(得分:0)
有时简单是最好的 - 不需要介绍统计数据。我建议从简单的分组开始。在该函数中,您可以平均,获得最小值,最大值和其他有用的数据位。以下是一些可以帮助您入门的示例:
SELECT Table1.State, Table1.Yr, Count(Table1.Price) AS CountOfPrice, Min(Table1.Price) AS MinOfPrice, Max(Table1.Price) AS MaxOfPrice, Avg(Table1.Price) AS AvgOfPrice
FROM Table1
GROUP BY Table1.State, Table1.Yr;
或(如果您想要包含月份数据)
SELECT Table1.State, Table1.Yr, Month([Dt]) AS Mnth, Count(Table1.Price) AS CountOfPrice, Min(Table1.Price) AS MinOfPrice, Max(Table1.Price) AS MaxOfPrice
FROM Table1
GROUP BY Table1.State, Table1.Yr, Month([Dt]);
显然你需要修改表格和字段名称(只是你知道 - '年'和'日''都是保留字,最好不用于字段名。)