Aggregate function over a given time interval

前端 未结 4 1193
灰色年华
灰色年华 2020-12-30 12:11

My SQL is a bit rusty and I\'m having quite a bit of difficulty with this problem. Suppose I have a table with a Timestamp column and a Number column. The goal is to return

4条回答
  •  孤独总比滥情好
    2020-12-30 12:38

    CREATE TABLE tt (time TIMESTAMP, value NUMBER);
    
    INSERT INTO tt (time, value) VALUES ('06-JUN-12 12.40.00.000000000 PM', 2);
    INSERT INTO tt (time, value) VALUES ('06-JUN-12 12.41.35.000000000 PM', 3);
    INSERT INTO tt (time, value) VALUES ('06-JUN-12 12.43.22.000000000 PM', 4);
    INSERT INTO tt (time, value) VALUES ('06-JUN-12 12.47.55.000000000 PM', 5);
    INSERT INTO tt (time, value) VALUES ('06-JUN-12 12.52.00.000000000 PM', 2);
    INSERT INTO tt (time, value) VALUES ('06-JUN-12 12.54.59.000000000 PM', 3);
    INSERT INTO tt (time, value) VALUES ('06-JUN-12 12.56.01.000000000 PM', 4);
    
    
    WITH tmin AS (
        SELECT MIN(time) t FROM tt
    ),   tmax AS (
        SELECT MAX(time) t FROM tt
    )
    SELECT ranges.inf, ranges.sup, AVG(tt.value)
    FROM
         (
            SELECT 
                5*(level-1)*(1/24/60) + tmin.t as inf,
                5*(level)*(1/24/60) + tmin.t as sup
            FROM tmin, tmax
            CONNECT BY (5*(level-1)*(1/24/60) + tmin.t) < tmax.t
        ) ranges JOIN tt ON tt.time BETWEEN ranges.inf AND ranges.sup
    GROUP BY ranges.inf, ranges.sup
    ORDER BY ranges.inf
    

    fiddle: http://sqlfiddle.com/#!4/9e314/11

    edit: beated by Justin, as usual... :-)

提交回复
热议问题