Maison  >  Article  >  base de données  >  Comment obtenir une précision GROUP BY de /- 3 secondes lorsque vous travaillez avec des données DateTime dans MySQL ?

Comment obtenir une précision GROUP BY de /- 3 secondes lorsque vous travaillez avec des données DateTime dans MySQL ?

Susan Sarandon
Susan Sarandonoriginal
2024-10-24 06:59:02806parcourir

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

MySQL GROUP BY DateTime avec une précision de /- 3 secondes

Énoncé du problème

Énoncé du problème un tableau avec des colonnes pour l'ID, l'horodatage et le titre, l'objectif est de regrouper les enregistrements qui se produisent à moins de 3 secondes les uns des autres. Dans ce scénario, les lignes avec les horodatages 15:00:00 et 15:00:02 seraient regroupées.

Solution

Au lieu d'identifier les débuts des chaînes basées sur des lignes individuelles, concentrons-nous sur le chaînage des horodatages.

Requête 1 : Déterminer les horodatages de début de chaîne

<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

Cette requête renvoie les horodatages qui n'ont aucun horodatage au-dessus d'eux dans 3 secondes, indiquant le début des chaînes.

Requête 2 : associer des enregistrements aux horodatages de début de chaîne

<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>

Pour chaque ligne, cette requête identifie la plus grande chaîne -horodatage de début (se produisant avant l'horodatage de la ligne).

Opération GROUP BY finale

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

Cette requête utilise la table GroupingQuery de la requête 2 pour regrouper les enregistrements en fonction de la colonne ChainStartTime, permettant des calculs agrégés au sein de chaque groupe horaire.

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Déclaration:
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn