-2
votes

Sélectionnez les lignes où la colonne> 0 après la dernière ligne où la colonne == 0

Je veux sélectionner des lignes après la dernière ligne où le Number colonne est 0.

Donc avec cette table,

Id | Number
------------
0  | 5
1  | 30
2  | 10
3  | 25
4  | 0
5  | 0  
6  | 30

Je veux obtenir des lignes avec l' Id 0 à 3 inclus.

Avec cette table,

Id | Number
------------
0  | 5
1  | 30
2  | 10
3  | 25
4  | 0

Je ne veux pas du tout de lignes.

Avec cette table,

Id | Number
------------
0  | 5
1  | 30
2  | 10
3  | 25

Je veux obtenir une ligne avec l' Id 6.

Détails SQL: MySQL 5.6.


10 commentaires

sqlfiddle est génial, en complément, mais vous devriez nous donner des exemples de données de table et attendre le résultat ici aussi. (N'oubliez pas que SO est une excellente archive et que le lien sqlfiddle sera bientôt inutile.)


@jarlh il y a des exemples de données inclus dans le sqlfiddle. Je fais ça bien? Dois-je faire une table ascii? Bon, je le comprends. Je vais le copier maintenant


Vous devriez l'avoir ici aussi.


Veuillez montrer les résultats que vous souhaitez. L'explication n'est pas très claire.


Spécifiez la version de VOTRE serveur MySQL.


mysqli 5.6. J'ai ajouté mon explication


Les exemples de données sont excellents! Mais spécifiez également le résultat attendu.


@jarlh merci. Mais je ne comprends pas, le résultat attendu est déjà là!


après la dernière ligne où Price est 0 Cette ligne avec Price=0 doit-elle correspondre à Name='Car Wash' ?


@Akina Oui, ça doit. Je vais le préciser


3 Réponses :


1
votes

Récupérez des enregistrements séparés:

SELECT COUNT(*)
FROM transaction t1
WHERE Name LIKE '%Car Wash%'
  AND NOT EXISTS ( SELECT NULL
                   FROM transaction
                   WHERE t1.id <= id
                     AND Name LIKE '%Car Wash%'
                     AND Price = 0 );

Récupérez leur montant uniquement:

SELECT * 
FROM transaction t1
WHERE Name LIKE '%Car Wash%'
  AND NOT EXISTS ( SELECT NULL
                   FROM transaction
                   WHERE t1.id <= id
                     AND Name LIKE '%Car Wash%' -- maybe not needed? not specified
                     AND Price = 0 );

violon


0 commentaires

0
votes

vous pouvez sélectionner

    select count(*)
    from (
       select 
       from my_table 
       where name like '%car%' and price > 0
    ) t

et pour le compte

    select 
    from my_table 
    where name like '%car%' and price > 0


0 commentaires

0
votes

J'interprète cette question comme "combien de lignes y a-t-il pour" lavage de voiture "après la première ligne avec prix> 0". Si c'est le cas:

select count(*)
from (select t.*,
             min(case when price = 0 then id end) over () as id_at_0
      from transaction t 
     ) t
where name = 'Car Wash' and id > id_at_0


1 commentaires

La version MySQL est la 5.6.