Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/sql-server/24.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Sql 将多个“WITH CTE”查询的结果作为一个结果返回_Sql_Sql Server - Fatal编程技术网

Sql 将多个“WITH CTE”查询的结果作为一个结果返回

Sql 将多个“WITH CTE”查询的结果作为一个结果返回,sql,sql-server,Sql,Sql Server,我试图在n个时间段内从同一产品中选择最高价格,即最后5、50、100、500。 目前,我正在为上述时间段运行四次查询,如下所示: ;WITH CTE AS ( SELECT TOP (500) * FROM Ticker WHERE ProductId='BTC-USD' ORDER BY ID DESC ) SELECT TOP (1) * FROM CTE ORDER BY PRICE desc 有没有办法一次在4行中获得所有结果?Hmmmm。我的第一个想法是建立一个

我试图在n个时间段内从同一产品中选择最高价格,即最后5、50、100、500。 目前,我正在为上述时间段运行四次查询,如下所示:

;WITH CTE AS 
(
    SELECT TOP (500) * FROM Ticker WHERE ProductId='BTC-USD'
    ORDER BY ID DESC
)  SELECT TOP (1) * FROM CTE 
ORDER BY PRICE desc

有没有办法一次在4行中获得所有结果?

Hmmmm。我的第一个想法是建立一个联盟:

但是,我有另一个想法:

with cte as (
      select top (500) t.*, row_number() over (order by id desc) as seqnum
      from Ticker t
      where ProductId = 'BTC-USD'
      order by id desc
     )
select v.which, x.max_price
from (values (5), (50), (100), (500)) v(which) cross apply
     (select max(price) as max_price from cte where seqnum <= which) x;
当然,CTE中的500需要与v中的最大值相匹配。实际上,你可以去掉CTE中的顶部

with cte as (
      select top (500) t.*, row_number() over (order by id desc) as seqnum
      from Ticker t
      where ProductId = 'BTC-USD'
      order by id desc
     )
select v.which, x.max_price
from (values (5), (50), (100), (500)) v(which) cross apply
     (select max(price) as max_price from cte where seqnum <= which) x;