假设我有一个包含两列的表
TIMESTAMP类型的TimeStamp
FLOAT类型
此表由外部应用程序创建和更新,因此插入和更新不受我的控制。表格设计不能以任何方式改变。
我需要做的是选择在过去一个月中每天最靠近和早上10点之前的每个条目。
提前致谢。
答案 0 :(得分:1)
内部预查询应该在您当前所在月份之前每年/每月进行。这是由格式化的“YYYY-MM-01”日期创建的SQLVariable强制执行的,例如今天。 .. 2012-03-19,只保留年/月但强制01.这也意味着时间戳为凌晨12:00:00(午夜)。 NEXT @变量用于确定刚刚计算出的那个月的第一个月...因此2012-02-01。这将根据您的时间戳/浮点值表格查询WHERE子句的变量。
现在,您可以获得最大时间,仅按时间戳的公共日期部分进行分组,但保留条目的HOUR()在上午10点之前的条目的完整实际日期和时间...
从那里,重新加入到原始表格,其中FINAL“LastPerDay”时间与每天匹配。现在,如果同一天的实际上一个时间戳条目实际上具有多个精确时间条目,并且hh:mm:ss(或任何精度)的粒度
,则可以获得多个条目select
PreQuery.JustTheDate,
YT2.FloatColumnName
from
( select
Date_Format( YT.TimeStampColumn, '%Y-%m-%d' ) JustTheDate,
max( YT.TimeStampColumn ) as LastPerDay
from
( select @FirstOfThisMonth := Date_Format( '%Y-%m-01' ),
@FirstOfPriorMonth := Date_Sub( @FirstOfThisMonth, interval 1 month ) ) sqlvars,
YourTable YT
where
YT.TimeStampColumn >= @FirstOfPriorMonth
AND YT.TimeStampColumn < @FirstOfThisMonth
AND Hour( YT.TimeStampColumn ) < 10
group by
`JustTheDate`
order by
`JustTheDate` DESC ) PreQuery
JOIN YourTable YT2
ON PreQuery.LastPerDay = YT2.TimeStampColumn