Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/mysql/71.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
Mysql SQL:从事件数据到概率图_Mysql_Sql_Pattern Recognition - Fatal编程技术网

Mysql SQL:从事件数据到概率图

Mysql SQL:从事件数据到概率图,mysql,sql,pattern-recognition,Mysql,Sql,Pattern Recognition,我很想知道以下问题是否也可以通过一些(对我来说是超级高级的)SQL查询来解决 我有一个包含事件的MySQL表(一行表示在特定日期和时间打开或关闭的设备)。从这里,我想通过计算特定设备在一天中某个特定时间打开或关闭的概率来提取模式(以de DB计算所有天数的平均值) 通过编码,这是相当容易的,但计算量和I/O强度相当大。(我只需遍历所有行,在一天中每分钟用一列填充一个数组,然后进行归一化处理。) 我在SQL方面不是很有经验,所以我想知道我是否可以做得更聪明一些: 是否可以构造一个SQL查询来执行

我很想知道以下问题是否也可以通过一些(对我来说是超级高级的)SQL查询来解决

我有一个包含事件的MySQL表(一行表示在特定日期和时间打开或关闭的设备)。从这里,我想通过计算特定设备在一天中某个特定时间打开或关闭的概率来提取模式(以de DB计算所有天数的平均值)

通过编码,这是相当容易的,但计算量和I/O强度相当大。(我只需遍历所有行,在一天中每分钟用一列填充一个数组,然后进行归一化处理。)

我在SQL方面不是很有经验,所以我想知道我是否可以做得更聪明一些:

  • 是否可以构造一个SQL查询来执行同样的操作
  • 或者至少是介于两者之间的一步(链接一个开和关事件,对于这种组合,每天用0或1填充一行一分钟)
  • 或者更好的方法是提取模式:)
这是我到目前为止所取得的成绩(不是很好):

编辑: 谢谢你的快速回复。尼尔森的回答已经帮助我向前迈出了重要的一步

对于德根: 我的理想输出是每个设备(大约有30个设备)的一行,该设备在一天中每分钟都有打开的概率(因此,对于表示0:00的列,该值为0,而对于6:30列,该值为0.5,表示设备每2天打开一次的可能性)


或者,在这两者之间的一个有意义的步骤是为每个开-关序列派生一行,其中打开和关闭时间之间的所有列都是1,而其他所有列都是0。这两种方法在SQL中都有效吗?

老实说,我不建议尝试用SQL做这么复杂的事情。它是一种数据库查询语言,这是它的特点。你最好将数据提取到另一种语言中,然后再从那里使用它。当你说“一天中的某个特定时间”时,你的意思是你只对一个时间感兴趣(对于不同的查询可能会有所不同),还是你的意思是你对一天中的每一分钟都感兴趣(你的问题的其他部分暗示了这一点)? 如果是前者,这可以在SQL中相当直接地完成——您必须在一行上获取设备的每个打开时间和相应的关闭时间(可能是通过自连接),然后使用内来确定设备是否在您感兴趣的时间内打开。我同意上面的说法。SQL用于存储和检索数据。其他所有内容都是针对应用程序级代码的。能否将所需的输出描述为数据表?如果可以,也许可以编辑您的问题并添加所需的输出。这样就可以很容易地确定在SQL中实现这一点有多困难
SELECT `deviceID`
      , HOUR(FROM_UNIXTIME(timestamp)) AS hour
      , MINUTE(FROM_UNIXTIME(timestamp)) AS minute
      , DAYOFWEEK(FROM_UNIXTIME(timestamp)) AS`dayofweek`
      , newValue > 0 AS onoff
FROM `log_raw`
WHERE 1