sql >> Databáze >  >> RDS >> Mysql

MySQL GROUP BY DateTime +/- 3 sekundy

Používám skvělý nápad Toma H., ale tady to dělám trochu jinak:

Místo hledání všech řádků, které jsou počátky řetězců, můžeme najít všechny časy to jsou začátky řetězců, pak se vraťte a vyhledejte řádky, které odpovídají časům.

Dotaz č. 1 by vám měl říci, které časy jsou počátky řetězců, a to tak, že zjistí, které časy nemají žádné časy pod nimi, ale do 3 sekund:

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

A pak pro každý řádek můžeme najít největší časové razítko začínající řetězcem, které je menší než naše časové razítko s dotazem č. 2:

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

Jakmile to budeme mít, můžeme to GROUP BY, jak jste chtěli.

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

Nejsem si úplně jistý, že je to dostatečně odlišné od odpovědi Toma H, aby bylo možné zasílat samostatně, ale znělo to, jako byste měli potíže s implementací, a přemýšlel jsem o tom, tak jsem si řekl, že to napíšu znovu. Hodně štěstí!



  1. 4 způsoby, jak zobrazit seznam všech zobrazení v MySQL

  2. Jak zpřístupnit databázi mySQL v mé lokalitě z různých počítačů?

  3. Vytvořte si úžasné seznamy sami nebo GitHub jako notebook

  4. Získejte den v roce z data v SQL Server (T-SQL)