2017-08-08 4 views
-2

Supposons que nous ayons la table t avec les données d'horodatage, t est rempli avec des données supplémentaires. Il est raisonnable de supposer que les données sont insérées en rafales de n lignes à intervalles de quelques secondes entre les lignes (intervalle non constant) et qu'elles ne sont pas insérées pendant une période relativement longue. Je cherche à trouver que n. Toute suggestion?Calcul de la taille de la rafale moyenne

Im en utilisant MySQL donc exemple de code MySQL serait génial, mais aussi des suggestions de l'algorithme connu d'utiliser ou de tout ce qui peut être bon aussi bien ...

+2

S'il vous plaît partager le tableau et les données avec nous et aussi nous fournir les résultats attendus .. vous obtiendrez plus et peut-être meilleures réponses –

+1

Voir: [Pourquoi devrais-je fournir un MCVE pour ce qui me semble être un SQL très simple requête?] (https://meta.stackoverflow.com/questions/333952/pourquoi-doit--provide-un-mcve-pour-que-vous-permet-de-montre-une-que-simple- sql-query) – Strawberry

Répondre

1

Si je comprends bien votre problème, cela ressemble à un problème que je J'ai dû résoudre avant aussi. (Bien qu'il ait été déguisé pour moi.)

MySQL n'a pas de moyen de voir efficacement la différence entre les enregistrements précédents/suivants. J'ai travaillé autour de ceci en introduisant une liste liée à la table. Le coût de ce faire était que tous les insertions et suppressions devaient passer par une procédure transactionnelle sûre qui gardait la liste (double) liée. J'ai opté pour une paire de procédures stockées, qui a fonctionné magnifiquement.

jeux de données résultant ressemblait à ceci:

+------------------------------------+ 
| id | insert_ts | prev_id | next_id | 
+------------------------------------+ 
| 1 | 12:32  | NULL | 2  | 
| 2 | 12:34  | 1  | 3  | 
| 3 | 12:40  | 2  | NULL | 
+------------------------------------+ 

(. Indexé unique avec une clé étrangère à elle-même sur prev_id et next_id)

Interrogation alors l'écart entre un dossier et ce qui a précédé, il est tout simplement: Assurez-vous que si vous utilisez la date/l'horodatage, utilisez la fonction de comparaison de temps appropriée et non la ma thématique "moins" comme je l'ai fait ci-dessus.

Pour vous assurer des performances - il s'agissait d'une table modérément à haut débit sur un système financier, la cohérence des données était solide et le débit n'a jamais été goulot. Je peux vous fournir quelques conseils sur la façon d'implémenter les routines à insérer/supprimer.

+0

Belle implémentation de liste chaînée, mais qu'en est-il du calcul de la taille de rafale n? Comment suggéreriez-vous de le faire? –

+0

Je ne comprends peut-être pas votre question initiale, je pensais que l'exemple 'SELECT' requête dans ma réponse a démontré comment? Ai-je raison de comprendre que «n» est le temps * entre deux enregistrements insérés? – wally

+0

Si vous cherchez à voir combien d'enregistrements ont été insérés tous les 10 secondes (en tant que période de l'horodatage A à B) avec le nombre d'enregistrements, la méthode la plus optimale consiste à tracer ces données de façon itérative dans une procédure stockée (ou langue de votre choix). SQL ne peut se regrouper que par les données dont il dispose (dans une table). – wally