我有一个只有两个字段的表(在SQLite3中,但我可以使用PostgreSQL或SQLServer),这两个字段有一个日期时间和一个int值(房间的温度),如下所示:
+-----------------------------------+
| Table: Temperature |
+---------------------+-------------+
| Date | Temperature |
+---------------------+-------------+
| 2017-03-03 15:10:00 | 25 |
| 2017-03-03 15:11:00 | 25 |
| 2017-03-03 15:12:00 | 25 |
| 2017-03-03 15:13:00 | 25 |
| 2017-03-03 15:14:00 | 26 |
| 2017-03-03 15:15:00 | 26 |
| 2017-03-03 15:16:00 | 26 |
| 2017-03-03 15:17:00 | 26 |
| 2017-03-03 15:18:00 | 26 |
| 2017-03-03 15:19:00 | 27 |
| 2017-03-03 15:20:00 | 27 |
+---------------------+-------------+就像在这个例子中,我每分钟都有一个温度。
这是用来监控其他系统的温度,但我也喜欢在网页中显示,使用python (flask),但在网页中显示每分钟的温度并不重要,但每10分钟或每小时显示一次温度更好。
如何选择只显示每10分钟(或其他间隔)的温度?所以我的结果一定是:
+-----------------------------------+
| Table: Temperature |
+---------------------+-------------+
| Date | Temperature |
+---------------------+-------------+
| 2017-03-03 15:10:00 | 25 |
| 2017-03-03 15:20:00 | 27 |
+---------------------+-------------+发布于 2017-03-04 02:23:35
对于sql-server,您可以这样做:
select *
from temperature
where datepart(minute,[date])%10 = 0对于postgres,您可以使用类似以下内容:
select *
from temperature
where cast(date_part('minute',date) as int) % 10 = 0;两者都返回:
+---------------------+-------------+
| date | temperature |
+---------------------+-------------+
| 2017-03-03 15:10:00 | 25 |
| 2017-03-03 15:20:00 | 27 |
+---------------------+-------------+sql server rextester演示:http://rextester.com/DXMCK81428
postgres rextester演示:http://rextester.com/NAXX57760
发布于 2017-03-04 02:27:51
SELECT * FROM table LIMIT -1 OFFSET 10从这个post
发布于 2017-03-04 02:58:28
select * from temperature where substr(date,16,1)='0' order by date一个改进可能是返回每十分钟内的平均温度。这也将使其在缺少度量的情况下更加稳健:
select
'From '||min(date)||' to '||max(date) period,
sum(1) meassurements,
avg(temp) avg_temp
from temperature
group by substr(date,1,15)
order by 1将15替换为14,以显示小时周期。
下一步可能是还显示完全缺少测量的时期。这也可以通过一个查询来实现。我没有在这里展示这一点。
https://stackoverflow.com/questions/42585864
复制相似问题