Nasıl MySQL her n satır alabilirim?

2 Cevap php

Ben veri her dakika kaydedildi içeren bir tablo var, bu yüzden her dakika için bir satır var. Işlem için veri döndürme, bu hassasiyeti, son 6 saat için gereklidir, ancak bundan sonra daha düşük bir hassasiyet seviyesi yeterli, örneğin bir her 5 dakika.

Ben bir diziye bütün verileri döndürmek ve sonra tüm ama her 5 öğe kaldırmak ama bu MySQL tarafından döndürülen tüm veri gerektirir ve daha sonra birinci diziye okuyabilirsiniz - veri oldukça çok.

Nasıl MySQL her n satır dönebilirsiniz? Ben primaryKey% primaryKey auto_increment olduğunu = 0 5 ama bu kullanarak önerir this blog yazısı okudum

a) doesn't use indexes b) will only return primaryKey values which are divisible by 5 and in the case of deletions, may not actually be every 5th row

Bu sadece SQL sorgusu içinde yapılabilir veya imleci kullanarak sonuç kümesi üzerinden satır satır döngü gerektirir?

Ben DB bağlanmak için PHP MySQLi kullanıyorum.

2 Cevap

Damgaları her 5 dakikada bir listesi:

SELECT
  MIN(logtimestamp) AS first_of_five_minutes
FROM tLog
GROUP BY
  DATE(logtimestamp),
  HOUR(logtimestamp),
  MINUTE(logtimestamp) - (MINUTE(logtimestamp) % 5)

Şimdi, logtimestamps üzerinde first_of_five_minutes katılarak istenen günlük girdilerini almak için bir sub-select olarak kullanabilirsiniz. Tabii ki, ek WHERE-hükümler Eğer "doğru" damgaları olsun böylece iç ve dış çoğaltılması gerekir.

Ayrıca, bu her beş dakikalık aralıklarla, ilk zaman damgası döndürür unutmayın puanlık doğrudan minutes%5 = 0 sadece katları aslında logentries dönmek kullanarak çözümler: Eğer kayıt günlükleri gecikmeler varsa başarısız olabilir 05, veya benzer.

ancak bu işe yarayabilir tamamen denenmemiş

SELECT Row, col_a 
FROM (SELECT @row := @row + 1 AS Row, col1 AS col_a FROM table1) As derived1 
WHERE Row%5 = 0;