Tôi có hệ thống giám sát thu thập dữ liệu cứ sau mỗi giây (n ~ = 10 nhưng thay đổi). Tôi muốn tổng hợp dữ liệu được thu thập theo khoảng thời gian 15 phút. Có cách nào để corral cột dấu thời gian vào khối 15 phút để cho phép nhóm để làm việc?Truy vấn mysql nhóm theo khoảng thời gian 15 phút
Trả lời
SELECT FLOOR(UNIX_TIMESTAMP(timestamp)/(15 * 60)) AS timekey
FROM table
GROUP BY timekey;
thích ứng của phương pháp 1) dưới đây:
select Round(date_format(date, "%i")/(15*60)) AS interval
from table
group by interval
thích ứng của phương pháp 3) dưới đây:
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;
Một vài phương pháp tôi đã tìm thấy 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;
(Cũng ở đây: http://www.bradino.com/mysql/dayparting-on-datetime-field-using-substring/)
EDIT: Tất cả các giải pháp sẽ thực hiện tốt trên một bảng với một số lượng lớn hồ sơ.
cũng - bạn sẽ thích ứng với các nhóm này theo phạm vi 15 phút như thế nào? – nickf
Cách tương tự như ~ unutbu đã làm. Nhưng ông đã nhanh hơn :-) –
Hãy thử điều này, nhóm các hồ sơ của khoảng 15 phút, bạn có thể thay đổi 15 * 60 đến khoảng thời gian trong giây bạn cần
SELECT sec_to_time(time_to_sec(datefield)- time_to_sec(datefield)%(15*60)) as intervals from tablename
group by intervals
Tôi thích cách tiếp cận này nhiều nhất vì nó giữ khoảng thời gian phút là một trong những cột imo làm cho nó dễ đọc hơn. Cảm ơn. – MrB
Điều này cũng giúp tôi! Cảm ơn. Cần nó trong nhiều giờ vì vậy tôi đã thay đổi (15 * 60) thành (60 * 60) – plocks
Điều này không có tác dụng nếu các bản ghi chứa nhiều ngày, vì sau đó tất cả các bản ghi cùng thời gian trong các ngày được nhóm lại. – hepabolu
này làm việc cho tôi
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)
tôi bắt đầu với câu trả lời được đưa ra ở trên bởi unutbu nhưng không nhận được những gì tôi cần và phải thêm một chút vào nó.
Select Created, from_unixtime(FLOOR(UNIX_TIMESTAMP(Created)/(15*60))*(15*60)) GroupTime, COUNT(*) as Cnt FROM issue i GROUP BY GroupTime
Mã này chia bởi 900 giây trong một khoảng 15 phút sau đó tầng giá trị và nhân đôi nó lại lên 900, về cơ bản làm tròn xuống đến thặng dư 15 phút gần nhất.
Theo dõi các nhóm truy vấn hàng và tạo dấu thời gian trong khoảng thời gian 15 phút.
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 Timestamps
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
đang nhóm lại thành 2016 -11-09 13:30:00
sec_to_time(time_to_sec(created_dt)- time_to_sec(created_dt)%(15*60) + (15*60)))
Giới hạn trên khoảng thời gian tối đa 15 phút gần nhất. ví dụ 00:10 -> 12:15concat(date(created_dt) , ' ', sec_to_time(time_to_sec(created_dt)- time_to_sec(created_dt)%(15*60) + (15*60)))
Tạo một dấu thời gian lấy ngày từ các lĩnh vực dấu thời gian.
- 1. Thêm 15 phút vào thời gian hiện tại và chụp nhanh khoảng 15 phút
- 2. Nhóm Hibernate theo khoảng thời gian
- 3. Thời gian vòng tới khoảng cách 15 phút gần nhất trong Excel
- 4. Joda Thời phút trong một thời gian hoặc khoảng
- 5. Tạo thường xuyên 15 phút chuỗi thời gian từ bất quy tắc chuỗi thời gian
- 6. Truy vấn MYSQL: dấu thời gian mới nhất + giá trị duy nhất trong 30 phút qua
- 7. Thời gian thực hiện truy vấn MySql
- 8. Ghi thời gian nhóm theo ngày, không theo thời gian
- 9. Nhóm MySQL theo khoảng thời gian trong một phạm vi ngày
- 10. Thêm phút nhất định để thời gian trong MySQL
- 11. thời gian kỷ nguyên và MySQL truy vấn
- 12. Dữ liệu MySQL nhóm thành các nhóm thời gian có kích thước tùy ý
- 13. C# LINQ Truy vấn - Nhóm theo
- 14. Cách làm tròn thời gian tới đoạn 15 phút gần nhất
- 15. Truy vấn MySQL để nhóm theo phạm vi ngày?
- 16. Nhóm theo datetime bỏ qua phần thời gian
- 17. Truy vấn MySQL: Thời gian dài ở trạng thái 'init'
- 18. Android - TimePicker phút tới 15
- 19. mysql "nhóm bởi" truy vấn rất chậm
- 20. Tạo khoảng thời gian theo giờ/phút bằng cách sử dụng gấu trúc
- 21. Làm cách nào để nhóm DataFrame theo một khoảng thời gian?
- 22. Truy vấn MySQL cho thời gian GMT hiện tại
- 23. Đo thời gian truy vấn MySQL thực tế
- 24. Cách hết thời gian chờ truy vấn mysql ++ trong C++
- 25. Từ thời gian (ví dụ "15 phút" hoặc "2 giây") thành "00:15:00" hoặc "00:00:02"
- 26. Tăng ngày theo một khoảng thời gian
- 27. Khoảng thời gian thực Scala, Khoảng thời gian Int
- 28. Định dạng Crontab - cứ 15 phút
- 29. Postgres Truy vấn thời gian thực hiện
- 30. truy vấn sql mất nhiều thời gian dài so với lần chạy tiếp theo
Không nên là «UNIX_TIMESTAMP (dấu thời gian)/(15 * 60)' trong vài phút? –
Vâng, cảm ơn bạn đã sửa @Alexander và @nickf. – unutbu
Tôi không nghĩ rằng ROUND là đúng chức năng nên được sử dụng ở đây. DIV phù hợp hơn. 'UNIX_TIMESTAMP (dấu thời gian) DIV (15 * 60)' Vì CHỌN VÒNG (1.8), VÒNG (2.1) sẽ rơi vào cùng một đoạn, mặc dù chúng không nên. Tham khảo: http://stackoverflow.com/a/3086470/412786 – tzzzoz