根据当天的最后一小时选择记录

时间:2015-03-31 17:33:18

标签: sql performance mysqli

enter image description here enter image description here基本上我有一个数据库,可以在每天的每一分钟检索数据。这是我公司过去三年发生的事情。我正在寻找一个查询,每天晚上11:00:00拉取所有记录。我有一个时间戳列,并尝试了以下,但它不会产生任何结果。时间戳格式如下:2011-10-13 16:59:00.000。

从WaterUsage中选择* 时间戳类似于'%23:00:00%'

谢谢。

更新:以下公式似乎有效,但遗漏了几天......不确定为什么......

用cte作为 (

选择     *     row_number()over(由datediff(d,0,Timestmp)按timestmp desc排序)作为rn   来自WaterUsage   ) 选择 * 来自cte
其中rn = 1

更新:如果我要在一个时间范围内检索年度结果,这也可以。 从WaterUsage中选择*,其中TimeStmp> ' 2011'和TimeStmp< ' 2012'

3 个答案:

答案 0 :(得分:0)

正确的答案是在开头放置空格,因为时间戳是日期+时间。

Select * from WaterUsage Where TimeStmp like '% 23:%'`

另一种方式:

Select * from WaterUsage Where UNIX_TIMESTAMP(TimeStmp)%86400 > 82800

您需要检查这两个选项的效果。

答案 1 :(得分:0)

如果您想在23:00获得记录

Select * from WaterUsage 
where datepart(hour , TimeStmp) = 23 and datepart(minute , TimeStmp) = 00 

如果您要从23:00到一天结束时获取记录

Select * from WaterUsage 
where datepart(hour , TimeStmp) = 23 

答案 2 :(得分:-1)

猜测你的时间戳列是你可以做的VARCHAR列

Select * from WaterUsage Where TimeStmp like '23:%'

如果时间戳字符串以' 23开始,表达式Timestamp like '23:%'仅评估为true:'。所以23:00:00到23:59:59之间的每个时间戳都会匹配它。

注意(仅在时间戳列仅存储时间且没有日期时才适用) 不要把一个%放在23的前面因为那时表达式也会匹配03:23:50(只是一个例子)

**如果时间戳列中有前导日期,那么正确的查询将是

Select * from WaterUsage Where TimeStmp like '% 23:%'

只是为了确保在%和23之间包含空格