簡體   English   中英

SQL如何獲取列基於時間戳減去值

[英]SQL how to get columns subtract value based on time stamp

我有一個表_event和值插入如下:

create table _event ( event_type integer not null, value integer not null, [time] datetime not null, unique(event_type, time) );


insert into _event values(2, 5, '2015-05-09 12:42:00');

insert into _event values(4, -42, '2015-05-09 13:19:57');

insert into _event values(2, 2, '2015-05-09 14:48:30');

insert into _event values(2, 7, '2015-05-09 12:54:39');

insert into _event values(3, 16, '2015-05-09 13:19:57');

insert into _event values(3, 20, '2015-05-09 15:01:09');

我需要將結果打印如下:

回答:

event_type value
2 -5
3 4

它應該按時間將具有相同event_type順序的行相減並減去值。

例如:表:

event_type  value   time
2   5   2015-05-09 12:42:00.000
4   -42 2015-05-09 13:19:57.000
2   2   2015-05-09 14:48:30.000
2   7   2015-05-09 12:54:39.000
3   16  2015-05-09 13:19:57.000
3   20  2015-05-09 15:01:09.000

僅選擇event_type 2和3行。按時間戳排序。因此event_type:2

event_type  value   time
2              5    2015-05-09 12:42:00.000
2              2    2015-05-09 14:48:30.000
2              7    2015-05-09 12:54:39.000

結果將根據頂級時間戳選擇值2,7並減去:

event_type       value  
     2            -5 

希望一切都清楚了,請幫助我。

謝謝

下面的方法首先為每個event_type組分配行號。 然后,它使用數據透視查詢來標識第二最新事件並從中減去最新事件。

SELECT
    event_type,
    MAX(CASE WHEN rn = 1 THEN value END) -
        MAX(CASE WHEN rn = 2 THEN value END) AS value
FROM
(
    SELECT event_type, value, [time],
        ROW_NUMBER() OVER (PARTITION BY event_type ORDER BY [time] DESC) rn
    FROM _event
) t
WHERE rn <= 2
GROUP BY
    event_type
ORDER BY
    event_type;

在此處輸入圖片說明

演示版

暫無
暫無

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

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