sql >> Database >  >> RDS >> Mysql

MySQL GROEP OP DatumTijd +/- 3 seconden

Ik gebruik het uitstekende idee van Tom H., maar doe het hier een beetje anders:

In plaats van alle rijen te vinden die het begin van kettingen zijn, kunnen we alle tijden vinden dat zijn het begin van kettingen, ga dan terug en zoek de rijen die overeenkomen met de tijden.

Vraag #1 hier zou u moeten vertellen welke tijden het begin van ketens zijn door te zoeken welke tijden geen tijden onder zich hebben, maar binnen 3 seconden:

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

En dan kunnen we voor elke rij de grootste kettingstarttijdstempel vinden die kleiner is dan onze tijdstempel met Query #2:

SELECT Table.id, MAX(StartOfChains.TimeStamp) AS ChainStartTime
FROM Table
JOIN ([query #1]) StartofChains
ON Table.Timestamp >= StartOfChains.TimeStamp
GROUP BY Table.id

Zodra we dat hebben, kunnen we het GROUPEREN zoals u dat wilt.

SELECT COUNT(*) --or whatever
FROM Table
JOIN ([query #2]) GroupingQuery
ON Table.id = GroupingQuery.id
GROUP BY GroupingQuery.ChainStartTime

Ik weet niet helemaal zeker of dit genoeg verschilt van het antwoord van Tom H om apart te worden gepost, maar het klonk alsof je problemen had met de implementatie, en ik zat erover na te denken, dus ik dacht dat ik het nog een keer zou posten. Veel succes!



  1. FOUT 1356 (HY000):weergave 'mysql.user' verwijst naar ongeldige tabel(len) of kolom(men) of functie(s) of definiëring/aanroeper van weergave heeft geen rechten om ze te gebruiken

  2. Gids voor het ontwerpen van een database voor quiz in MySQL

  3. MySql SELECT-unie voor verschillende kolommen?

  4. hoe het scheidingsteken uit de kolominhoud te ontsnappen bij het exporteren van csv