在SQL中查找异常值

时间:2014-02-03 23:48:12

标签: sql ms-access ms-access-2013

我是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中实现的良好异常检测方法。

1 个答案:

答案 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]);

显然你需要修改表格和字段名称(只是你知道 - '年'和'日''都是保留字,最好不用于字段名。)