나는이 같은 MySQL의 테이블이 :MySQL은 : 시계열 데이터에서 추출 카운터 차이
우리가 업데이 트를 얻을 때마다 우리는 이벤트 카운터의 값을 저장CREATE TABLE IF NOT EXISTS `mytable` (
`ts` datetime NOT NULL,
`cnt` int(10) unsigned NOT NULL,
PRIMARY KEY (`ts`)
) ENGINE=InnoDB;
; 이러한 업데이트는 임의의 시간에 도착합니다.
X 시간 (예 : 5 분, 1 일, 1 개월 등)마다 이벤트 수를 추출하는 방법은 무엇입니까? 나는 쉽게 이것을 날짜/시간 SQL 함수 (예 : 시간, 일, 월 등)를 통해 추출 된 간격으로 단순화 할 수 있습니다.
우리는 보장 할 수 없지만 추출하려는 간격과 비교할 때 평균 데이터는 "밀집"입니다. EG. 데이터는 대개 매 시간마다 여러 번 나타납니다. 그러나 나는 한 시간 간격으로 이벤트 수를 묻지 않을 것입니다. < 1 시간. 저장된 데이터에 "문제"(예 : 큰 구멍)가있는 경우 결과에 "문제"가있는 것이 허용됩니다. 예를 들어
, 나는이 (24 시간 기간 예)와 같은 쿼리에 관심이 카운터 값을 얻을 수 있습니다 :SELECT ts, cnt
FROM mytable
GROUP BY DATE(ts)
ORDER BY ts DESC
을 ... 그리고 이벤트가 쉽게 빼서 계산 될 수 계산 각 행의 카운터는 전임자와 동일합니다. 하지만 가능한 경우 SQL에서 그렇게하고 싶습니다. 또한
,이 문제에 대한 좋은 이름은 (난 당신이 시계열 및 카운터로 작업 할 때 그것은 하나 오히려 일반적인 생각) 내 어휘 :
죄송합니다. 기본 키는 타임 스탬프의 줄임말 인'ts' 열에있었습니다. 여기저기서 쿼리를 작성하고 편집하는 동안 내 잘못. 나는 그 문제를 바로 잡기 위해 편집했고, 이제 나는 당신의 전체 답을 읽고 이해하는 데 시간을 할애 할 것이다. :) – Luke404
그러면 해결책을 명확히하는 데 도움이 될 것입니다. 아이디어는 행 # 1을 행 # 2와 비교하고, 행 # 2를 행 # 3과 비교하는 것입니다. 두 행을 비교하면 시간에 차이가납니다. 그들은 또한 카운트의 차이를 만듭니다. 델타 (카운트)/델타 (시간)는 각 샘플에 대한 초당 평균 카운트입니다. –
그래, 그걸 이해하고 나는 또한 당신의 솔루션을 테스트하고 적용했다. 고맙습니다. – Luke404