我正在构建一个web应用程序,其中有一个javascript图表。其思想是选择一个时间范围,从数据库获取相关数据(温度),将其传递到页面并显示在图表中。
数据的日期时间没有固定的间隔,所以从一行到下一行,时间差可能是一秒,也可能是几分钟。
我可以轻松地完成所有这些操作,但我遇到了一个问题:目前,当我想要获取数据时,比如说,08:00到10:00,我可以通过选择datetime字段>= 08:00和datetime字段<= 10:00的行来实现这一点。这是可以的,但这给了我的差距开始和结束几乎每一个查询,因为最后一个响应。第一个值很可能不等于边界。
我需要给定时间范围内的数据以及范围之前的一个值和范围之后的一个值,以便我可以显示从范围的开始到结束的连续线。
当然,我可以简单地执行三个查询:获取范围限制内的数据,2。获取范围3之前的第一个值。获取范围后的第一个值。这是有效的,但我想知道是否有更好/更优雅/更高效的方式来做到这一点?有没有什么我没听说过的SQL函数?我使用实体框架6作为ORM子查询可以为报表窗口提供边界值,从而可以在单个SELECT
中获得所需的所有行:
SELECT captureTime, temperature FROM temperatures
WHERE captureTime >= (
SELECT MAX( captureTime ) FROM temperatures
WHERE captureTime <= '2015-01-01 08:00:00'
) AND captureTime <= (
SELECT MIN( captureTime ) FROM temperatures
WHERE captureTime >= '2015-01-01 10:00:00'
)
ORDER BY captureTime