SQL所有行之间的最小间隔

时间:2017-03-03 18:16:58

标签: sql sqlite

我有一个只有两个字段的表(在SQLite3中,但我可以使用PostgreSQL或SQLServer),它有一个datetime和一个int值(一个房间的温度),如下所示:

<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js">
</script>
<ul>
  <li>abc</li>
  <li>def</li>
  <li>ghi</li>
</ul>

在示例中,我每分钟都有一个温度。

这用于监控其他系统的温度,但我也喜欢在网页中使用python(flask)显示它,但是在网页中显示温度并不重要分钟,但每10分钟或每小时更好。

如何选择仅显示每10分钟(或另一个间隔)的温度?所以我的结果必须是:

+-----------------------------------+
| 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 |
+---------------------+-------------+

3 个答案:

答案 0 :(得分:3)

对于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 demo:http://rextester.com/DXMCK81428

postgres rextester演示:http://rextester.com/NAXX57760

答案 1 :(得分:1)

SELECT * FROM table LIMIT -1 OFFSET 10

从此post

答案 2 :(得分:1)

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以显示小时时段。

下一步可能是显示完全错过预测的时期。这也可以只用一个查询。我不会在这里表明。