首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何限制SQL-结果和获取avg?

问如何限制SQL-结果和获取avg?
EN

Stack Overflow用户
提问于 2017-05-20 09:43:01
回答 1查看 114关注 0票数 1

我使用这个SQL-查询来选择特定无线传感器节点的所有值,根据时间戳绘制图表。

代码语言:javascript
复制
SELECT * FROM measurement 
        WHERE nodeId = :nodeId 
        AND datetime BETWEEN :datetimestart 
        AND :datetimeend

查询的数据通过AJAX发送到客户端。如果在较长的范围内选择时间戳,则数组将到达大范围,而数据转换需要很长的时间。如果数组限制在100个入口,那就好多了。仅将查询限制为100并不能解决问题。

我需要做的是选择时间戳的整行,并取100个不同内部时间戳的平均值。内部时间戳应该是动态的,并且取决于外部时间戳。

我不知道如何解决这个问题。根据带有SQL-查询的时间戳,可以选择100个平均数据吗?还是我需要用PHP解析数组?

编辑:表度量的结构:

代码语言:javascript
复制
ID          nodeID      humidity    temperature  pressure    voltage     datetime
20519       Node1       46.66       21.39        1013.9      3.313       2017-05-20 10:54:00
20520       Node1       46.87       21.37        1013.9      3.321       2017-05-20 10:54:15
20521       Node1       46.55       21.35        1013.9      3.321       2017-05-20 10:54:30
20522       Node1       46.45       21.35        1013.8      3.321       2017-05-20 10:54:45
20523       Node1       46.68       21.35        1013.9      3.321       2017-05-20 10:55:00
20524       Node1       47.07       21.35        1013.8      3.314       2017-05-20 10:55:15
20525       Node1       47.41       21.36        1013.9      3.321       2017-05-20 10:55:30
20526       Node1       47.51       21.37        1013.9      3.314       2017-05-20 10:55:45
20527       Node1       47.53       21.36        1013.8      3.321       2017-05-20 10:56:00
20528       Node1       46.6        21.33        1013.9      3.321       2017-05-20 10:56:15
20529       Node1       47.14       21.33        1013.9      3.314       2017-05-20 10:56:30
20530       Node1       47.13       21.33        1013.9      3.313       2017-05-20 10:56:46
20531       Node1       48.22       21.36        1013.9      3.321       2017-05-20 10:57:01
20532       Node1       49.96       21.39        1013.9      3.321       2017-05-20 10:57:16
20533       Node1       49.49       21.43        1013.9      3.321       2017-05-20 10:57:31
20534       Node1       49.53       21.49        1014.0      3.321       2017-05-20 10:57:46

编辑2我编写了一个pythontool来创建sqlite数据库:

代码语言:javascript
复制
    import sqlite3

conn = sqlite3.connect('/var/www/sqliteDatabases/database_sdr.db')                   #connect to database "database.db"
cur = conn.cursor()                                     #create a cursor
cur.execute('PRAGMA foreign_keys = ON')                 #enables the FOREIGN KEY constraint    


#______create table for temperature and humidity with date and time______
cur.execute('''CREATE TABLE measurement(
                ID INTEGER PRIMARY KEY AUTOINCREMENT,
                nodeId text,
                humidity float,
                temperature float,
                pressure float,
                voltage float,
                datetime text)''')
conn.commit()
conn.close()
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2017-05-20 11:00:32

在下面的SQLite查询中,我们计算每一行的period,并通过以下方法对结果进行分组:

代码语言:javascript
复制
SELECT AVG(humidity) AS avgHumidity,
       AVG(temperature) AS avgTemperate,
       AVG(pressure) AS avgPressure,
       AVG(voltage) AS avgVoltage,
       round(100*(julianday(datetime)-julianday(:datetimestart))/
             (julianday(:datetimeend)-julianday(:datetimestart))) AS period   
FROM measurement 
WHERE nodeId = :nodeId AND 
      datetime BETWEEN :datetimestart AND :datetimeend
GROUP BY period

所以基本上你需要分组你的结果。几个注意事项:

  • 我使用julianday()函数来添加、减去和 除法,在SQLite3中这可能不是正确的方法。
  • 我多次重用:datetimestart和:datetimeend。在MySQL中 这是不允许的。我不知道SQLite3是否允许这样做。如果不是简单地将它们重命名为:datetimeend1、:datetimeend2等。
  • 这只是一个未经测试的正确方向的推动。你得自己决定细节。
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/44084325

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档