如何编写DRY查询以选择聚合和列

时间:2014-01-24 17:50:19

标签: mysql

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

0 个答案:

没有答案