SQL - 在一个时间跨度内选择x个条目

时间:2017-03-15 20:15:16

标签: mysql sql count precision timespan

我正在创建一个包含测量表的数据库(在MySQL中)。对于每个测量,我想存储它所引入的DateTime。为了在应用程序中显示不同间隔的图(日/周/月/年的测量值),我想要采样我拥有的数据点,所以我可以返回e。 G。全年30个数据点以及日/小时。这与股票价格图表相同:

stock price plot for 1 day VS stock price plot for 1 month

如您所见,两张图片中的数据点数量相同。

那么如何通过SQL在MySQL的时间跨度内选择x个条目?

我的数据如下:

+====+====================+=============+==========+
| id | datetime           | temperature | humidity |
+====+====================+=============+==========+
| 1  | 1-15-2016 00:30:00 | 20          | 40       |
+----+--------------------+-------------+----------+
| 2  | 1-15-2016 00:35:00 | 19          | 41       |
+----+--------------------+-------------+----------+
| 3  | 1-15-2016 00:40:00 | 20          | 40       |
+----+--------------------+-------------+----------+
| 4  | 1-15-2016 00:45:00 | 20          | 42       |
+----+--------------------+-------------+----------+
| 5  | 1-15-2016 00:50:00 | 21          | 42       |
+----+--------------------+-------------+----------+
| 6  | 1-15-2016 00:55:00 | 20          | 43       |
+----+--------------------+-------------+----------+
| 7  | 1-15-2016 01:00:00 | 21          | 43       |
+====+====================+=============+==========+

让我们说,我总是想要两个数据点(实际上更多)。因此,在过去的半小时内,我希望数据库返回数据点1和4,在过去的十分钟内,我希望它返回6和7。

感谢您的帮助!

PS:我很抱歉我的英文错误

2 个答案:

答案 0 :(得分:0)

好的,假设一个非常简单的系统方法,你可以得到任何定义时期的第一个和最后一个条目:

select *
from table
where mydatetime =
   (select 
    max(mydatetime)
    from table
    where mydatetime between '2017-03-01' and '2017-03-15'
    )
OR mydatetime =
   (select 
    min(mydatetime)
    from table
    where mydatetime between '2017-03-01' and '2017-03-15'
    )

答案 1 :(得分:-1)

我相信您的答案可以在以下位置找到:

https://stackoverflow.com/a/1891796/7176046

如果您要过滤掉不在您的查询将使用的日期/时间内的任何项目:
Select * from table where Date/Time is (What you want to sort by)