[英]Aggregating Data SQL
MachineID Active_Inactive Time
A 0 10.10 am
A 0 10.11 am
A 1 10.12 am
A 0 10.13 am
A 0 10.14 am
A 0 10.15 am
A 1 10.16 am
A 1 10.17 am
A 1 10.18 am
現在,從上表中,我想以某種方式找出輸出,該輸出可以讓我在2分鍾的窗口中看到機器A處於活動狀態的次數和不活動的次數。 因此,需要每兩分鍾進行一次匯總。 像A一樣,從10.10-10.11變成2倍無效,而0倍活躍。 如何代表輸出表的最佳方法
有5個插槽
10.10-10.11(1), 10.12-10.13(2) and so on...
輸出應如下所示。
Slots Active A Inactive A
1 0 2
2 1 1
3 0 2
4 1 1
5 2 0
假設時間是日期類型,這就是我要做的。 請注意,這是在oracle上。 但這應該沒有太大的不同。
CREATE TABLE temp (
Machine nvarchar2 (10),
Active number,
dt date
);
INSERT INTO temp VALUES ('A', 0, to_date('10.10 am', 'hh.mi am'));
INSERT INTO temp VALUES ('A', 0, to_date('10.11 am', 'hh.mi am'));
INSERT INTO temp VALUES ('A', 1, to_date('10.12 am', 'hh.mi am'));
INSERT INTO temp VALUES ('A', 0, to_date('10.13 am', 'hh.mi am'));
INSERT INTO temp VALUES ('A', 0, to_date('10.14 am', 'hh.mi am'));
INSERT INTO temp VALUES ('A', 0, to_date('10.15 am', 'hh.mi am'));
INSERT INTO temp VALUES ('A', 1, to_date('10.16 am', 'hh.mi am'));
INSERT INTO temp VALUES ('A', 1, to_date('10.17 am', 'hh.mi am'));
INSERT INTO temp VALUES ('A', 1, to_date('10.18 am', 'hh.mi am'));
Select
Machine,
Active,
to_char(dt, 'hh') || '.' || to_char(floor(to_char(DT, 'mi') /2) * 2) || '-' || to_char(dt, 'hh') || '.' || to_char(floor(to_char(DT, 'mi') /2) * 2 + 1) timeGroup
from temp
group by Machine, Active, to_char(dt, 'hh') || '.' || to_char(floor(to_char(DT, 'mi') /2) * 2) || '-' || to_char(dt, 'hh') || '.' || to_char(floor(to_char(DT, 'mi') /2) * 2 + 1)
;
您可以使用轉換,字符串和日期函數創建分組
SELECT machine_id, active_inactive,CONVERT(VARCHAR(13),time,21)+ ':'+RIGHT ('00'+FLOOR(CAST(DATEPART(minute,time)/2) *2 AS VARCHAR(2)),2), COUNT(*)
FROM yourtable
GROUP BY machine_id, active_inactive, CONVERT(VARCHAR(13),time,21)+ ':'+RIGHT ('00'+FLOOR(CAST(DATEPART(minute,time)/2) *2 AS VARCHAR(2)),2)
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.