Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/ms-access/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
在SQL中查找异常值_Sql_Ms Access_Ms Access 2013 - Fatal编程技术网

在SQL中查找异常值

在SQL中查找异常值,sql,ms-access,ms-access-2013,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 一对(州,年)代表一个年份(像葡萄酒),虽然在这里有不同的列。所以,我们来谈谈“CA 2012”的价格在全年中是如何变化的 因为我们的一些数据是手动输入到这个数据库中的,所以有可能出错。我们想写一个查询,标记

我对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
一对(州,年)代表一个年份(像葡萄酒),虽然在这里有不同的列。所以,我们来谈谈“CA 2012”的价格在全年中是如何变化的

因为我们的一些数据是手动输入到这个数据库中的,所以有可能出错。我们想写一个查询,标记任何可疑条目以供进一步审查

我已经阅读了许多关于这个主题的不同问题和线索,但没有发现任何东西能够解决我主要关心的问题,即如何找到本地异常值——价格可以上下波动,因此在某个日期范围内可以接受的价格可能是今年早些时候的异常值


更新:我将数据分为几个月,因此查找本地异常值可能更容易。我仍然在寻找可以在SQL中实现的好的离群点检测方法。

有时候简单是最好的——现在还不需要介绍统计学。我建议从简单的分组开始。在该函数中,您可以平均、获取最小、最大和其他有用的数据位。以下是几个示例,让您开始学习:

    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;
或者(如果您希望包含月份数据)


显然,您需要修改表名和字段名(只是让您知道-‘Year’和‘Date’都是保留字,最好不要用作字段名。)

您打算如何准确地计算您的异常值?使用TOP来确定列price中最高值的x个数?或者最低/最高价格?我没有任何特别的方法。任何(甚至是幼稚的)简单的实现都会很好,所以我至少可以开始玩它。例如:
从表中选择前10个价格、状态、年份\u name order by Price desc
从表中选择10个最高价格。这正是第一条评论的要点。您希望如何计算异常值?谢谢,这个回答非常有用。指挥小组对我来说非常有效。对于每一对(州、年份),我将值分为几个月,并按照您的建议计算平均值、最小值和最大值。现在,我正在实现我的简单方法,即取平均值,并对误差有+/-百分比容差,如果最小值或最大值超出该范围,则我将其标记。有什么简单的方法可能更好吗?没有,至少没有。你所做的应该很好。当你开始钻研统计学时,事情很快就会变得相当复杂。例如;在group by方法中,没有数据的“权重”,这几乎总是统计中需要的。看起来你只是想要一些东西让你开始-从那里你需要研究细节。统计学是一个很大的领域,如果可以的话,可以小试一下。
    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]);