簡體   English   中英

聚合數據SQL

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

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