MySQL的数据排序,根据该时间间隔

问题描述:

以我MySQL数据库表有在每次10个分钟间隔的数据,前 //时间格式 “YYYY-MM-DD HH:MM:SS”MySQL的数据排序,根据该时间间隔

Time    | value 

2012-03-02 1:10:00|2 
2012-03-02 1:20:00|5 
. 
2012-03-02 2:00:00|3 

用户可以选择开始时间,结束时间和时间间隔(10分钟,30,1小时,1天), ex如果用户选择开始时间

:2012-03-02 1:15:00,结束时间2012-03-02 2:10:00和间隔为10分钟,然后结果

Time    | value. 

2012-03-02 1:15:00|2 
2012-03-02 1:25:00|5 
. 
2012-03-02 2:05:00|3 

值是在时间间隔的最后一个数据,(例如数据15的值将是第10分钟的值)

我现在做的是我得到了整个数据集在该时间段不考虑(在我的程序中)根据用户选择的时间间隔获取结果, 时间间隔表示:10个薄荷糖,30个薄荷糖,1小时,1天

我的c#程序变得很慢,因为有很多迭代,他们的任何方式,我可以直接查询数据库,并立即获得数据,您的意见是高度赞赏

不是存储您的时间间隔为值,您可以通过存储的时间间隔为代表开始和结束的时间间隔,像这种两个DateTime领域避免所有这些问题:

  • UserId
  • StartingInterval:DateTime。
  • EndingInterval:DateTime。

然后你就可以通过减去两个datetime领域以及通过使用BETWEEN两个领域陷入了设定的时间间隔的设定数据的获取时间间隔。

我不同意MGA的回答是有意义的,因为你没有存储间隔,你正在存储事件 - 并且每个事件与一次相关,而不是两次。

我不太明白你的查询的输入,因为如果用户给你一个开始时间和结束时间,间隔已经设置好了,不是吗?我想你只需要一个时间间隔(换句话说,你需要“2012 03 02 10:00:00”和“1小时”或“2012 03 02 10:00:00”和“2012” 03 02 10:10:00“)。

我们假设如果用户给你一个日期和时间间隔,你的程序可以将它转换为开始时间和结束时间,所以你的查询将得到两个输入参数:start_time和end_time。

这里是一个可行的查询(测试用命令行的临时变量):

SELECT value FROM mytable 
WHERE `Time` >= @start_time 
AND `Time` <= @end_time 
ORDER by `Time` DESC 
LIMIT 1; 

你必须处理这种情况没有什么是你的程序返回的,当然,这种情况。