J'ai besoin de résoudre ce problème dans Pure SQL: Je dois compter tous les enregistrements avec une valeur spécifique: Dans ma table, il y a un drapeau de colonne avec des valeurs 0 ou 1. Je dois compter tout le 1 après le dernier 0 et résumer les valeurs de la colonne de la quantité de ces enregistrements.
Exemple: P>
2 | 50
3 Réponses :
J'ai supposé que votre exemple est commandé logiquement par montant. Ensuite, vous pouvez le faire: si la plus grande valeur est d'une ligne où drapeau = 0 code>, rien ne sera retourné. P> P>
Il n'est pas trié par montant
Si votre table peut ne pas contenir aucun em> zéros, vous êtes plus sûr avec: ou, à l'aide des fonctions de fenêtre: p> select count(*) as cnt, sum(amount) as amount
from (select t.*, max(case when flag = 0 then amount end) as flag0_amount
from t
) t
where flag0_amount is null or amount > flag0_amount
C'était ma première solution mais j'ai besoin de le résoudre avec un maximum d'accès à la table car il est très cher
Je trouve la solution par moi-même:
Y a-t-il une colonne qui définit la commande? Sans cela, cela est impossible car il n'y a pas d'ordre intrinsèque dans des tables (qui sont en réalité des relations, un cas particulier d'ensembles). Et s'il vous plaît étiqueter le SGBD et sa version c'est pour que les solutions puissent varier considérablement parmi eux.
Votre exemple est-il commandé par montant?
Non, ce n'est pas ...