J'interroge une base de données SQLite pour des messages dans des intervalles d'une heure, où je suis intéressé par une entrée pr userid pr hour (ceci est maintenant fait avec succès avec la clause GROUP BY). Pour interroger la base de données pour chaque intervalle horaire prend un temps assez long, je pensais que je gagnerais du temps si je ne demandais qu'une seule fois la base de données sans aucun intervalle de temps, puis manipulais le tableau résultant en morceaux de taille heure. Et accomplissant ainsi la même chose que ma méthode originale. Mais comment puis-je faire cela?Comment faire un équivalent de GROUP BY en python
for k in range(0,3000):
start = 1398942000+k*60*60
end = 1398942000+(k+1)*60*60
cur.execute('SELECT userid, unixtime, latitude, longitude FROM table WHERE unixtime > {start} AND unixtime < {end} GROUP BY userid'.format(start = start, end = end))
Ceci est ma requête telle qu'elle est maintenant. Cela fonctionne bien, mais prend beaucoup de temps. Idéalement, il ressemblerait à ceci:
cur.execute('SELECT userid, unixtime latitude, longitude FROM message')
Puis
* list = fetchall bla bla bla*
for k in range(0,137*24):
start = 1398942000+k*60*60
end = 1398942000+(k+1)*60*60
thisHourInterval = list[:indextoClosestUnixTimeToEnd]
list = list[indextoClosestUnixTimeToEnd:]
*Only one entry pr id in thisHourInterval*
Ou je me trompe quand je pense que ce sera une solution plus rapide? La quantité de données est assez grande, probablement> 4gig.
Pour être clair - je sais comment obtenir les données de la base de données, mais je suis à la recherche d'un python équivalent de groupe BY et où unixtime> début et unixtime < fin
Merci d'avoir signalé mon erreur de formatage. Oui, j'utilise GROUP BY et cela fonctionne très bien, mais je préfère mettre tout le jeu de données en mémoire et y travailler, plutôt que d'interroger la base de données SQLite autant de fois - mais peut-être que l'interrogation est la plus rapide? – bjornasm