Mysql 如何编写干式查询来选择聚合和列

Mysql 如何编写干式查询来选择聚合和列,mysql,Mysql,在中,我试图找到列的最小值和列值之间的时间戳差异。这用于规范化时间序列数据。 问题是: 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

在中,我试图找到列的最小值和列值之间的时间戳差异。这用于规范化时间序列数据。 问题是:

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示例:

编辑

以下是我在postgresql中的做法:

编辑

这是我的mysql装置,它使用变量实现了我想要的功能:


MySQL既不支持窗口函数,也不支持常用的表表达式,所以我认为没有一种方法可以满足您的需要。@a_horse_,没有_名称,我添加了一个使用变量的MySQL解决方案
select 
  stock_name,
  datediff(second, min(query_time) over (partition by stock_name), query_time) t0,
  value
from sts;
select 
  stock_name, 
  extract('seconds' from query_time- (min(query_time) over())) t0,
  value 
from sts;
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