首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >SQL具有最小间隔的所有行

SQL具有最小间隔的所有行
EN

Stack Overflow用户
提问于 2017-03-04 02:16:58
回答 3查看 107关注 0票数 1

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

代码语言:javascript
运行
复制
+-----------------------------------+
| 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分钟(或其他间隔)的温度?所以我的结果一定是:

代码语言:javascript
运行
复制
+-----------------------------------+
| Table: Temperature                |
+---------------------+-------------+
| Date                | Temperature |
+---------------------+-------------+
| 2017-03-03 15:10:00 |          25 |
| 2017-03-03 15:20:00 |          27 |
+---------------------+-------------+
EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2017-03-04 02:23:35

对于sql-server,您可以这样做:

代码语言:javascript
运行
复制
select * 
from temperature 
where datepart(minute,[date])%10 = 0

对于postgres,您可以使用类似以下内容:

代码语言:javascript
运行
复制
select *
from temperature 
where cast(date_part('minute',date) as int) % 10 = 0;

两者都返回:

代码语言:javascript
运行
复制
+---------------------+-------------+
|        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

票数 3
EN

Stack Overflow用户

发布于 2017-03-04 02:27:51

代码语言:javascript
运行
复制
SELECT * FROM table LIMIT -1 OFFSET 10

从这个post

票数 1
EN

Stack Overflow用户

发布于 2017-03-04 02:58:28

代码语言:javascript
运行
复制
select * from temperature where substr(date,16,1)='0' order by date

一个改进可能是返回每十分钟内的平均温度。这也将使其在缺少度量的情况下更加稳健:

代码语言:javascript
运行
复制
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,以显示小时周期。

下一步可能是还显示完全缺少测量的时期。这也可以通过一个查询来实现。我没有在这里展示这一点。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/42585864

复制
相关文章

相似问题

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