[英]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.