在this sqlfiddle中,我试图找到列的最小值和列值之间的时间戳差异。这用于标准化时间序列数据。 这是查询:
select
sts1.stock_name,
sts1.t- sts2.tmin t0,
sts1.value
from (
select
id,
stock_name,
unix_timestamp(query_time) t,
value
from sts
where query_time between '2014-01-24 10:00:01' and '2014-01-24 10:00:08'
) sts1
cross join (
select
min(unix_timestamp(query_time)) tmin
from sts
where query_time between '2014-01-24 10:00:01' and '2014-01-24 10:00:08'
) sts2;
如何在不重复where条件或双重加入同一个表的情况下编写此内容?
在MSSQL中,当您添加min
列时,它不会截断结果集,只会选择min
和数据。
修改
这是一个MSSQL示例: http://sqlfiddle.com/#!3/79dd0/10
select
stock_name,
datediff(second, min(query_time) over (partition by stock_name), query_time) t0,
value
from sts;
修改
以下是我在postgresql中的做法: http://sqlfiddle.com/#!15/52532/8
select
stock_name,
extract('seconds' from query_time- (min(query_time) over())) t0,
value
from sts;
修改
这是我的mysql装置,它使用变量做我想要的东西: http://sqlfiddle.com/#!2/27bfe/9
select
stock_name,
case when @c= 0 then @tmin:= query_time else query_time end,
@c:= @c+ 1,
time_to_sec(timediff(query_time, @tmin)) t0,
value
from sts