聚合数据SQL

聚合数据SQL,sql,sql-server,Sql,Sql Server,现在,从上表中,我想找出输出,它给出了机器a在2分钟窗口中处于活动状态的次数和处于非活动状态的次数。因此,每两分钟需要进行一次聚合。LikeA从10.10-10.11不活跃2倍,活跃0倍。表示输出表的最佳方式是什么 有5个插槽 MachineID Active_Inactive Time A 0 10.10 am A 0 10.11 am A 1

现在,从上表中,我想找出输出,它给出了机器a在2分钟窗口中处于活动状态的次数和处于非活动状态的次数。因此,每两分钟需要进行一次聚合。LikeA从10.10-10.11不活跃2倍,活跃0倍。表示输出表的最佳方式是什么

有5个插槽

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
输出应该如下所示

10.10-10.11(1), 10.12-10.13(2) and so on...

假设时间是日期类型,这就是我要做的。请注意,这是在oracle上进行的。但两者应该没有太大区别

Slots   Active A    Inactive A
  1       0            2
  2       1            1
  3       0            2
  4       1            1
  5       2            0

可以使用转换、字符串和日期函数创建分组

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)
;

您的active\u inactive time列的数据类型是什么?您使用的是哪种DBMS?神谕Postgres?我正在使用Sequel服务器我不知道Sequel服务器。您可以通过将奇数行和偶数行连接在一起来实现这一点,您将使用哪种数据类型作为列时间?????
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)