mysql数据按时间间隔排序

时间:2012-03-23 08:52:30

标签: c# mysql

在我的MySQL数据库表中,每10分钟间隔有一些数据,例如 //时间格式“yyyy-MM-dd hh:mm:ss”

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,1hr,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

值是时间间隔中的最后一个数据,(ex数据值为15th将是第10分钟的值)

我现在所做的是在时间段内得到整套数据,而不考虑时间间隔,然后手动操作数据集(在我的程序中),根据用户选择的时间间隔得到结果, 时间间隔是指:10分钟,30分钟,1小时,1天

我的c#程序变得很慢,因为有很多迭代,他们可以直接查询数据库并立即获取数据,您的评论非常感谢

2 个答案:

答案 0 :(得分:0)

不是将时间间隔存储为值,而是通过将时间间隔存储为表示起始和结束间隔的两个DateTime字段来避免所有这些问题,如下所示:

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

然后,您可以通过使用datetime两个字段减去两个BETWEEN字段和属于一组间隔的数据集来获取时间间隔。

答案 1 :(得分:0)

我不同意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;

当然,您必须处理程序中没有返回任何内容的情况。