문제

매분 기록된 데이터가 포함된 테이블이 있으므로 매분마다 행이 있습니다.처리를 위해 데이터를 반환할 때 지난 6시간 동안 이 정확도가 필요하지만 그 이후에는 더 낮은 수준의 정확도로도 충분합니다.5분마다.

모든 데이터를 배열로 반환한 다음 5번째 요소를 제외하고 모두 제거할 수 있지만 그러려면 MySQL에서 모든 데이터를 반환한 다음 먼저 배열로 읽어야 합니다. 상당히 많은 데이터입니다.

MySQL에서 n번째 행마다 어떻게 반환할 수 있나요?내가 읽고 이것 기본 키가 auto_increment인 경우 기본 키 % 5 = 0 사용을 제안하는 블로그 게시물이지만 이것은

a) 인덱스를 사용하지 않습니다. b) 는 5로 나눌 수있는 primaryKey 값 만 반환하며 삭제의 경우 실제로 5 번째 행마다 없을 수 있습니다.

이 작업은 SQL 쿼리 내에서만 수행할 수 있습니까? 아니면 커서를 사용하여 결과 집합을 통해 행 단위로 반복해야 합니까?

나는 사용하고있다 MySQLi PHP로 DB에 연결합니다.

도움이 되었습니까?

해결책

5분마다의 타임스탬프 목록:

SELECT
  MIN(logtimestamp) AS first_of_five_minutes
FROM tLog
GROUP BY
  DATE(logtimestamp),
  HOUR(logtimestamp),
  MINUTE(logtimestamp) - (MINUTE(logtimestamp) % 5)

이제 이를 하위 선택으로 사용하여 가입을 통해 요청된 로그 항목을 가져올 수 있습니다. logtimestamps 에게 first_of_five_minutes 에.물론 추가로 WHERE-절은 "올바른" 타임스탬프를 얻기 위해 내부와 외부에서 복제되어야 합니다.

또한 이는 5분 간격으로 첫 번째 타임스탬프를 반환하지만 솔루션은 직접 다음을 사용합니다. minutes%5 = 0 실제로 :05의 배수인 로그 항목만 반환합니다. 로그 기록이 지연되거나 유사한 경우 실패할 수 있습니다.

다른 팁

완전히 테스트되지 않았지만 작동할 수도 있습니다.

SELECT Row, col_a 
FROM (SELECT @row := @row + 1 AS Row, col1 AS col_a FROM table1) As derived1 
WHERE Row%5 = 0; 
라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top