Disons que j'ai une table comme celui-ci (ordonnée par id
):Limite en courant total SQLite
id amount
--- ---
1 10
2 15
3 10
4 30
Je veux une requête qui renvoie des lignes telles que la somme de amount
est supérieur à un nombre donné . Donc (dans une syntaxe inexistante) SELECT id, amount LIMIT BY running_total(amount) 20
sélectionne les 2 premières lignes, ... LIMIT BY running_total(amount) 60
sélectionne toutes les lignes. Je ne peux pas changer le schéma pour garder le total en cours précalculé. Cela peut-il être fait raisonnablement efficacement? Ce serait acceptable si la réponse ne fonctionne que sur SQLite.
Cela aura-t-il un comportement quadratique, ou les moteurs SQL sont-ils assez intelligents pour l'optimiser? –
@Alexey Romanov: Je ne sais pas ce que vous entendez par quadratique, et si vous connaissez un moyen de voir le plan de requête de SqlLite faites le moi savoir :) – Andomar
Le sous-objet pour la première ligne nécessite de regarder 0 lignes, par seconde: 1 ligne, puis 2, 3, etc. Si la Nième ligne est la bonne, nous avons dû regarder 0 + 1 + 2 + ... + (N-1) = N * (N - 1)/2 lignes. Mais il semble clair que nous n'avons besoin que de regarder N lignes. –