PHP和MySQL中的高级统计

PHP和MySQL中的高级统计,php,mysql,arrays,statistics,Php,Mysql,Arrays,Statistics,我有个小问题。我有一个数据集,其中包含气象站测量的值,我想使用MySQL数据库和PHP对其进行进一步分析。 基本上,数据库的第一列包含日期,其他列包含温度、湿度、压力等。 现在,问题是,对于平均值,st.dev.,max,min等的计算,它是非常简单的。但是,对于我需要的其他参数,例如峰度等,没有内置命令 例如,我需要计算每个月的偏度、平均值、stdev等,然后是天数等。 对于内置函数,它很容易,例如,查找个别月份的一些参数将是: SELECT AVG(Temp), STD(Temp), MAX

我有个小问题。我有一个数据集,其中包含气象站测量的值,我想使用MySQL数据库和PHP对其进行进一步分析。 基本上,数据库的第一列包含日期,其他列包含温度、湿度、压力等。 现在,问题是,对于平均值,st.dev.,max,min等的计算,它是非常简单的。但是,对于我需要的其他参数,例如峰度等,没有内置命令

例如,我需要计算每个月的偏度、平均值、stdev等,然后是天数等。 对于内置函数,它很容易,例如,查找个别月份的一些参数将是:

SELECT AVG(Temp), STD(Temp), MAX(Temp)
FROM database
GROUP BY YEAR(Date), MONTH(Date)
显然,我不能将其用于更高级的参数。我想到了实现这一目标的方法,我只能想到一个解决方案。我手动编写了一个函数,它处理这些值,并使用特定的公式计算峰度。但是,这意味着我需要为每个月、每天等创建数据数组,具体取决于我当前的计算内容。例如,我首先需要获取数据并将其拆分为数组,比如说1月11日、2月11日、3月11日。。。。。。每个数组将包含该月的数据。然后我将在这些数组上应用这个函数,并创建新的变量,其结果可以是峭度jan11、峭度feb11等

现在回答我的问题。我需要有关数据拆分的帮助。问题是,我不知道数据在哪个月开始,哪个月结束,所以我不能为此设置固定变量。程序首先必须检查第一个月,然后为每个月、每天等创建新数组,直到到达最后一条记录。对于每一个,它将创建一个数组


这当然可能是一个解决方案,但如果有人对如何解决这个问题有任何其他想法,我将非常感谢您的帮助。

您可以进行更复杂的查询来实现这一点。下面是一些示例,包括Skew

日期介于日期_from和日期_to之间


我想您需要一组介于数据范围之间的数据。

使用havingin sql检查特定月份。问题是我事先不知道有多少个月,我需要一年多内每个月的一个数组,因此不仅仅是从1月份开始的所有数据,来自febrauray等的所有数据-那么肯定可以创建12个数组,然后使用have填充它们。日期的范围是从1月到3月,或者是1月、4月、12月?日期的间隔为5分钟,但它们从2011年3月开始,一直到2013年4月等等。所以在这种情况下,我需要大约25个数组。这似乎非常有用,不幸的是,我只是SQL的初学者,不知道如何实现它。。。你能给我举个例子吗,假设我在日期变量中有日期,请看问题中的示例,然后我在Temp列中保存了温度,我想对数据执行一个特定的函数x,按Month分组。我认为关键是使用子查询来获取不同数据子集的信息。假设您想要每个月的平均差异:从数据库d1选择AVGd1.Temp-AVGd2.Temp,YEARd2.Date,MONTHd2.Date,从数据库d2按YEARd2分组。Date,MONTHd2.Date您可以多次使用同一个表并合并其结果,因为它们是不同的表,但我必须为每个月设置此值,即使这样也不可能,因为我不知道有多少个月-这在数据库中是可变的,程序需要检查这一点并为每年的每个月创建新数组你知道该查询的开始日期和结束日期吗?不,它们会有所不同,因为每5分钟会向数据库添加一次新数据。您不知道date1和date2的日期介于date1和date2之间吗?你能用count来计算插入了多少行吗?我想这就是我必须要做的,循环遍历整个数据集,并在每个月与上一条记录的月份不匹配时创建数组。
SELECT AVG(Temp), STD(Temp), MAX(Temp)
FROM database
GROUP BY YEAR(Date), MONTH(Date)