[SQL] 데이터 간격으로 그룹
SQL데이터 간격으로 그룹
나는 상점이 일정 기간 동안 네트워크 대역폭 사용과 단일 테이블이있다. 한 열은 날짜 시간 (기본 키)를 포함하고 다른 열은 대역폭을 기록합니다. 데이터는 매 분마다 기록됩니다. 우리는 시간에 그 순간에 다른 데이터를 기록하는 다른 열이있을 것이다.
사용자가 (24 시간 동안 시작과 끝 날짜 주어진 이내)로 15 분 간격의 데이터를 요청하는 경우, 내가 필요한 데이터를 얻을 수있는 단일 쿼리와 그 수 있습니다 또는 나는이 작업을 수행하는 저장 프로 시저 / 커서를 작성해야 ? 사용자을 5 개 간격으로 데이터 등을 요청할 수있다
내가 가장 가능성이 포스트 그레스를 사용하지만 더 좋을 거라 다른 NOSQL 옵션이있다?
어떤 아이디어?
해결법
-
==============================
1.
WITH t AS ( SELECT ts, (random()*100)::int AS bandwidth FROM generate_series('2012-09-01', '2012-09-04', '1 minute'::interval) ts ) SELECT date_trunc('hour', ts) AS hour_stump ,(extract(minute FROM ts)::int / 15) AS min15_slot ,count(*) AS rows_in_timeslice -- optional ,sum(bandwidth) AS sum_bandwidth FROM t WHERE ts >= '2012-09-02 00:00:00+02'::timestamptz -- user's time range AND ts < '2012-09-03 00:00:00+02'::timestamptz -- careful with borders GROUP BY 1, 2 ORDER BY 1, 2;
분당 하나의 타임 스탬프 TS를 대역폭 번호 : 열팽창 계수의 t는 테이블과 같은 데이터를 보유 할 수 있습니다. (당신은 대신 테이블 작업, 그 부분이 필요하지 않습니다.)
여기에 매우 비슷한 질문에 대한 매우 유사한 솔루션입니다 -이 특정 집단의 작동 방법에 대한 자세한 설명과는 :
다음은 합계를 실행에 관한 비슷한 질문에 대한 유사한 솔루션입니다 - 자세한 설명과 사용되는 다양한 기능에 대한 링크는 :
WITH -- same as above ... SELECT DISTINCT ON (1,2) date_trunc('hour', ts) AS hour_stump ,(extract(minute FROM ts)::int / 15) AS min15_slot ,bandwidth AS bandwith_sample_at_min15 FROM t WHERE ts >= '2012-09-02 00:00:00+02'::timestamptz AND ts < '2012-09-03 00:00:00+02'::timestamptz ORDER BY 1, 2, ts DESC;
취득로 15 분 간격 당 하나의 해제 집계 샘플 - 창에서 사용 가능한 마지막 행에서. 행이 누락되지 않은 경우는 15 분 될 것입니다. 중요한 부분은 DISTINCT ON 및 ORDER BY입니다. 여기에 사용 된 기술에 대한 자세한 정보 :
-
==============================
2.
select date_trunc('hour', d) + (((extract(minute from d)::integer / 5 * 5)::text) || ' minute')::interval as "from", date_trunc('hour', d) + ((((extract(minute from d)::integer / 5 + 1) * 5)::text) || ' minute')::interval - '1 second'::interval as "to", sum(random() * 1000) as bandwidth from generate_series('2012-01-01', '2012-01-31', '1 minute'::interval) s(d) group by 1, 2 order by 1, 2 ;
5 개 범위에 대해 그. 15 분 동안 15으로 나눕니다.
from https://stackoverflow.com/questions/12623358/group-by-data-intervals by cc-by-sa and MIT license
'SQL' 카테고리의 다른 글
[SQL] 여러 데이터 세트를 기반으로 BIRT 보고서를 만드는 방법 (0) | 2020.07.06 |
---|---|
[SQL] SQL Server 2008의 로그 파일 (* .LDF)을 읽기 (0) | 2020.07.06 |
[SQL] SQL 서버에서 날짜 간격을 병합 (0) | 2020.07.06 |
[SQL] SQL 서버 WHILE 루프 2008 삽입 (0) | 2020.07.06 |
[SQL] 오라클 리드 및 래그 함수 테라 당량 (0) | 2020.07.06 |