Sql 将多个“WITH CTE”查询的结果作为一个结果返回
我试图在n个时间段内从同一产品中选择最高价格,即最后5、50、100、500。 目前,我正在为上述时间段运行四次查询,如下所示: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。我的第一个想法是建立一个
;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;