簡體   English   中英

SQL Server:從第一行減去最后一行

[英]SQL Server : subtract last row from first row

我有一個查詢,返回很多行。 我需要最后一行和第一行中的值之間的差異。 TimeColDateTime列,所有其他列均為float類型。

我當前的(簡化的)查詢是這樣的:

select 
    timeCol, TotSoap_W1, TotSoap_W2, TotEnergy
from
    TotEnergy
where 
    TimeCol >= '2019-03-01 00:00:00' and timeCol < '2019-03-02 00:00:00'
order by 
    TimeCol asc

這可能不是最好的方法,但應該執行以下操作:

SELECT B.TotSoap_W1-A.TotSoap_W1 as TotSoap_W1, B.TotSoap_W2-A.TotSoap_W2 as TotSoap_W2, B.TotEnergy-A.TotEnergy as TotEnergy
FROM
(select TOP(1) timeCol, TotSoap_W1, TotSoap_W2, TotEnergy
from TotEnergy
where TimeCol >= '2019-03-01 00:00:00' and timeCol < '2019-03-02 00:00:00'
order by TimeCol ASC) A,
(select TOP(1) timeCol, TotSoap_W1, TotSoap_W2, TotEnergy
from TotEnergy
where TimeCol >= '2019-03-01 00:00:00' and timeCol < '2019-03-02 00:00:00'
order by TimeCol DESC
) B

您可以使用FIRST_VALUELAST_VALUE分析函數:

select top 1 LAST_VALUE(TotSoap_W1) OVER (ORDER BY TimeCol ROWS
                                          BETWEEN UNBOUNDEDPRECEDING AND UNBOUNDED FOLLOWING)
             - FIRST_VALUE(TotSoap_W1)
from TotEnergy
where TimeCol >= '2019-03-01 00:00:00' and timeCol < '2019-03-02 00:00:00'
order by TimeCol asc

LAST_VALUE根據排序順序返回每個組/結果集中的最后一個值。 在此查詢中,這與返回每一行的TotSoap_W1值相同。 為了使它返回所有結果中的最后一個值,我們需要在ROWS BETWEEN UNBOUNDEDPRECEDING AND UNBOUNDED FOLLOWING子句之間添加行

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM