Mam system monitorujący, który zbiera dane co n sekund (n ~ = 10, ale zmienia się). Chciałbym zebrać zebrane dane w odstępach 15-minutowych. Czy istnieje sposób, aby zepsuć kolumnę znacznika czasu na 15-minutowe porcje, aby umożliwić grupowanie?Zapytanie mysql dla grup przez 15-minutowe interwały
Odpowiedz
SELECT FLOOR(UNIX_TIMESTAMP(timestamp)/(15 * 60)) AS timekey
FROM table
GROUP BY timekey;
Adaptacja podejścia 1) poniżej:
select Round(date_format(date, "%i")/(15*60)) AS interval
from table
group by interval
Adaptacji podejściu 3) poniżej:
SELECT Round(Convert(substring(date_column, 14, 2), UNSIGNED)/(15*60)) AS interval /* e.g. 2009-01-04 12:20:00 */
FROM table
GROUP BY interval;
Kilka podejść Znalazłem here:
1)
select date_format(date, "%W") AS `Day of the week`, sum(cost)
from daily_cost
group by `Day of the week`
order by date_format(date, "%w")
2)
select count(*) as 'count',
date_format(min(added_on), '%Y-%M-%d') as 'week commencing',
date_format(added_on, '%Y%u') as 'week'
from system
where added_on >= '2007-05-16'
group by week
order by 3 desc;
3)
SELECT substring(postdate, 1,10) AS dd, COUNT(id) FROM MyTable GROUP BY dd;
(także tutaj: http://www.bradino.com/mysql/dayparting-on-datetime-field-using-substring/)
EDIT: Wszystkie rozwiązania będą wykonywać źle na stole z dużą liczbą rekordów.
cóż - w jaki sposób dostosowałbyś je do grupy o 15 minut? – nickf
Tak samo jak ~ unutbu. Ale był szybszy :-) –
Spróbuj tego, grupowanie zapisów 15 minut odstępu, można zmienić 15 * 60 do przedziału w sekundach trzeba
SELECT sec_to_time(time_to_sec(datefield)- time_to_sec(datefield)%(15*60)) as intervals from tablename
group by intervals
Najbardziej podoba mi się to podejście, ponieważ zachowuje interwał minutowy jako jedną z kolumn, czyniąc go bardziej czytelnym. Dzięki. – MrB
Pomogło mi to również! Dzięki. Potrzebowałem go godzinami, więc zmieniłem (15 * 60) na (60 * 60) – plocks
To nie działa, jeśli rekordy zawierają wiele dat, ponieważ wtedy wszystkie rekordy o tym samym czasie w różnych datach są pogrupowane. – hepabolu
Ten pracował dla mnie
mysql> **SELECT FROM_UNIXTIME(UNIX_TIMESTAMP(NOW())- UNIX_TIMESTAMP(NOW())%(15*60));**
+---------------------------------------------------------------------+
| FROM_UNIXTIME(UNIX_TIMESTAMP(NOW())- UNIX_TIMESTAMP(NOW())%(15*60)) |
+---------------------------------------------------------------------+
| 2012-02-09 11:15:00 |
+---------------------------------------------------------------------+
1 row in set (0.00 sec)
Zacząłem odpowiedź podana powyżej przez unutbu, ale nie dostałem tego, czego potrzebowałem i musiałem dodać trochę do tego.
Select Created, from_unixtime(FLOOR(UNIX_TIMESTAMP(Created)/(15*60))*(15*60)) GroupTime, COUNT(*) as Cnt FROM issue i GROUP BY GroupTime
Kod ten dzieli się przez 900 sekund w przedziale 15 minut a następnie podłogi wartość i mnoży się przez 900 do tyłu, w zasadzie zaokrąglone w dół do najbliższej 15 minut wartość.
Następujące wiersze grup zapytań i tworzy znaczniki czasu w odstępach 15-minutowych.
Select concat(date(created_dt) , ' ', sec_to_time(time_to_sec(created_dt)- time_to_sec(created_dt)%(15*60) + (15*60)))as created_dt_new from table_name group by created_dt_new
E.g Sygnatury
2016-11-09 13:16:29
2016-11-09 13:16:49
2016-11-09 13:17:06
2016-11-09 13: 17:26
2016-11-09 13:18:24
2016-11-09 13:19:59
2016-11-09 13:21:17
są pogrupowane w 2016 roku -11-09 13:30:00
sec_to_time(time_to_sec(created_dt)- time_to_sec(created_dt)%(15*60) + (15*60)))
górnej granicy czasu do najbliższego 15 min odstępach czasowych. np 12:10 -> 12:15concat(date(created_dt) , ' ', sec_to_time(time_to_sec(created_dt)- time_to_sec(created_dt)%(15*60) + (15*60)))
Generuje timestamp biorąc datę z pola datownika.
- 1. Zapytanie MYSQL dla tabeli
- 2. Entity Framework - zapytanie Linq z zamówieniem według grupy i przez:
- 3. Jak zaplanować zapytanie MySQL?
- 4. MySQL bardzo powolny zapytanie
- 5. Uzyskiwanie struktury Entity do pełnego obciążenia dla grup przez
- 6. jak cofnąć zapytanie mysql?
- 7. Jak uruchomić pojedyncze zapytanie przez mysql z wiersza poleceń?
- 8. Pomoc Mysql potrzebna do zoptymalizowania grupy przez sub zapytanie
- 9. Powolne zapytanie Mysql: JOIN + wiele GDZIE + ZAMÓWIENIE PRZEZ
- 10. Jak zliczyć liczbę grup zwracanych przez grupę?
- 11. Odniesienie do grup w regex MySQL?
- 12. Symulowanie grup przechwytywania regex w mysql
- 13. Zapytanie MySQL o listę wartości
- 14. MYSQL - Usuń zapytanie z połączeniem
- 15. MySQL - zapytanie UPDATE z LIMIT
- 16. Zapytanie Mysql do średniego czasu
- 17. Zapytanie ldap dla członków grupy
- 18. Mysql: Zamów przez jak?
- 19. Jak działają interwały ciągów znaków?
- 20. nieprawidłowe zapytanie mysql na insert
- 21. Wybierz zapytanie mysql między datą?
- 22. Zapisywanie grup przez miesiąc i rok w Railsach
- 23. Zapytanie Solr przez Solrj: Podstawy
- 24. Co jest szybsze? File_exist lub zapytanie MySQL?
- 25. Zapytanie MYSQL do przeszukiwania WSZYSTKICH pól?
- 26. Zapytanie Mysql, aby uzyskać liczbę na miesiące
- 27. Skróć powolne zapytanie Zaloguj się MySQL
- 28. Ręczne ustawianie kolorów grup dla ggplot2
- 29. Zapytanie SQL przez dwa połączenia?
- 30. Zapytanie przez DateTime w Ecto
Czy nie powinien to być "UNIX_TIMESTAMP (znacznik czasu)/(15 * 60)" przez kilka minut? –
Tak, dzięki za korektę @Alexander i @nickf. – unutbu
Nie uważam, że funkcja ROUND jest właściwa. DIV jest bardziej odpowiednie. 'UNIX_TIMESTAMP (znacznik czasu) DIV (15 * 60)' Ponieważ SELECT ROUND (1,8), ROUND (2.1) spadnie w tym samym segmencie, chociaż nie powinny. Ref: http://stackoverflow.com/a/3086470/412786 – tzzzoz