>  기사  >  데이터 베이스  >  MySQL에서 DateTime 데이터로 작업할 때 /- 3초의 GROUP BY 정밀도를 달성하는 방법은 무엇입니까?

MySQL에서 DateTime 데이터로 작업할 때 /- 3초의 GROUP BY 정밀도를 달성하는 방법은 무엇입니까?

Susan Sarandon
Susan Sarandon원래의
2024-10-24 06:59:02884검색

How to Achieve GROUP BY Precision of  /- 3 Seconds When Working with DateTime Data in MySQL?

/- 3초 정밀도의 MySQL GROUP BY DateTime

문제 설명

제공됨 ID, 타임스탬프, 제목 열이 있는 테이블의 목표는 서로 3초 이내에 발생하는 레코드를 그룹화하는 것입니다. 이 시나리오에서는 타임스탬프가 15:00:00과 15:00:02인 행이 함께 그룹화됩니다.

해결책

체인의 시작을 식별하는 대신 개별 행에서는 연결 타임스탬프에 중점을 두겠습니다.

쿼리 1: 체인 시작 타임스탬프 결정

<code class="mysql">SELECT DISTINCT Timestamp
FROM Table a
LEFT JOIN Table b
ON (b.Timestamp >= a.Timestamp - INTERVAL 3 SECONDS
    AND b.Timestamp < a.Timestamp)
WHERE b.Timestamp IS NULL

이 쿼리는 위에 타임스탬프가 없는 타임스탬프를 반환합니다. 3초, 체인의 시작을 나타냅니다.

쿼리 2: 레코드를 체인 시작 타임스탬프와 연결

<code class="mysql">SELECT Table.id, MAX(StartOfChains.TimeStamp) AS ChainStartTime
FROM Table
JOIN ([query #1]) StartOfChains
ON Table.Timestamp >= StartOfChains.TimeStamp
GROUP BY Table.id</code>

각 행에 대해 이 쿼리는 가장 큰 체인을 식별합니다. -시작 타임스탬프(행의 타임스탬프 이전에 발생).

최종 GROUP BY 작업

<code class="mysql">SELECT COUNT(*) --or whatever
FROM Table
JOIN ([query #2]) GroupingQuery
ON Table.id = GroupingQuery.id
GROUP BY GroupingQuery.ChainStartTime</code>

이 쿼리는 쿼리 2의 GroupingQuery 테이블을 사용하여 다음을 기반으로 레코드를 그룹화합니다. ChainStartTime 열을 사용하면 각 시간 그룹 내에서 집계 계산이 가능합니다.

위 내용은 MySQL에서 DateTime 데이터로 작업할 때 /- 3초의 GROUP BY 정밀도를 달성하는 방법은 무엇입니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

성명:
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.