-1
votes

Quertise SQL pour des conditions spécifiques

Besoin d'une assistance avec l'instruction SQL pour la condition inférieure à la condition. Avoir 3 colonnes dans une table (nom de table), SNO (enregistrements uniques), nom (il existe plusieurs enregistrements pouvant avoir le même nom), condition (vrai, faux). Besoin d'extraire tous les enregistrements si le dernier enregistrement true uniquement.

ont essayé ci-dessous Query xxx

attendu: Si le dernier enregistrement (SNO (max)) a la valeur = vrai ( Colonne de condition) Puis renvoyez cet enregistrement, sinon Aucun enregistrement affiché.

réel: Tous les enregistrements sont affichés, y compris la condition true et false


5 commentaires

Que voulez-vous dire avec "Dernier record", je ne vois pas une commande par? Et qu'est-ce que sno (max) dans la liste Sélectionner?


Veuillez ajouter des exemples de données et des résultats attendus.


Quelle version mysql utilisez-vous?


Quelques lignes de données d'échantillon et le résultat attendu contribueront grandement à comprendre à quoi avez-vous besoin exactement.


Dernier signification, dans mon exemple, si je sélectionne * Nom du nom, les résultats renvoient SNO (1,2,3,4,5,6), nom (Prasan, Prasan, Prasan, Joakim, Joakim, Joakim) et la condition (vraie, Vrai, faux, vrai, vrai, vrai), alors je m'attends à des résultats ayant 6, Joakim, True (comme le dernier enregistrement est vrai ici)


4 Réponses :


0
votes

pourrait être utile d'utiliser un endroit où il existe sur une sous-requête pour condition TRUE et SNO = max (SNO)

select  * 
from TableName 
where exist (
  select  * 
  from TableName 
  where  Condition = 'True'  
  and  Sno = (
  select  max(Sno) 
  from TableName 
  )
)


0 commentaires

1
votes

Je pense que vous recherchez que vous recherchez:

WHERE Condition IS TRUE AND ... 


5 commentaires

Avec cela, je n'obtiens qu'un seul disque. Je cherche tous les enregistrements dans lesquels le dernier enregistrement est vrai (c'est-à-dire = vrai)


Par exemple, si je sélectionne * Tablename, les résultats renvoient SNO (1,2,3,4,5,6), Nom (Prasan, Prasan, Prasan, Joakim, Joakim, Joakim) et Etat (vrai, vrai, faux, vrai , Vrai, vrai), je m'attends aux résultats ayant 6, Joakim, True (comme le dernier enregistrement est vrai ici), la colonne de condition n'est pas booléenne


Je n'obtiens qu'un seul disque, mais dans ma table, j'ai plusieurs enregistrements qui ont une valeur de colonne de condition comme vrai pour Max SNO (dernier enregistrement)


Ok, alors la question n'est pas claire pour moi. Si vous souhaitez obtenir des réponses de qualité, fournissez des questions détaillées: je vous suggère de modifier votre question initiale à fournir un ensemble d'échantillons de données incluant la situation que vous mentionnez et les résultats attendus.


Le commentaire de Izem ci-dessus Qui est les résultats exacts que je recherche, serait-il possible de l'obtenir en utilisant des requêtes plus simples (sans utiliser Join)



1
votes

Je pense que c'est ce que vous recherchez.
Si la table est comme ceci:
Entrez la description de l'image ici

[Il est recommandé d'utiliser tinyint (1) code> comme booléen dans mysql.] p>

Vous pouvez utiliser cette requête: P>

SELECT a.*
FROM `TableName` a
LEFT JOIN `TableName` b ON(a.`Sno` < b.`Sno`
                           AND a.`Name` = b.`Name`)
WHERE a.`Conditon` = 1
  AND b.`Sno` IS NULL


3 commentaires

Oui, c'est le résultat exact dont je m'attends, mais pourrions-nous faire avec des requêtes plus simples, je veux dire sans utiliser la condition de jointure?


@Prasanshetty de cette façon fonctionnera plus efficace que d'utiliser une sous-requête interne. Surtout dans les grandes tables.


Cette requête m'a aidé à obtenir les résultats requis. Merci!



0
votes
SELECT * 
FROM   tablename 
WHERE  sno IN (SELECT Sno(max) 
               FROM   tablename 
               GROUP  BY NAME) 
       AND condition = 'true' 

0 commentaires