2017-06-21 1 views
1

J'essaie d'obtenir les build_notes d'une table de base de données "build_wiki_notes_meta" avec les conditions suivantes, j'utilise la requête ci-dessous qui ne me donne pas sortie, quelqu'un peut-il fournir des conseils sur la façon de résoudre ce problème? Quel est le problème? Y at-il une meilleure requête (plus rapide)?Requête pour obtenir les dernières notes de construction qui ne sont pas nulles et ne correspondent pas à une chaîne

1.MAX date_created

2.MATCHES a donné software_product_id

3.build_notes est pas null

4.build_notes ne correspond pas à Currently no notes for this build

QUERY:

select 
    meta_name, 
    build_notes 
from 
(
    select meta_name, MAX(date_created) AS date_created, build_notes 
    from build_wiki_notes_meta 
    where software_product_id = 105 
    order by date_created desc 
) as tmp 
where (tmp.build_notes is NOT null) AND 
     (tmp.build_notes NOT LIKE '%Currently no notes for this build%') 

table de base de données: -

enter image description here

Répondre

0

Votre requête actuelle a plusieurs problèmes, et je ne pouvais pas penser aussi d'une belle façon de formuler votre requête autre que ce qui est donné ci-dessous. Vous souhaitez cibler un certain groupe d'enregistrements en fonction d'un certain nombre de conditions. En plus de ces conditions, vous voulez que l'enregistrement (s) ayant la dernière date de création. Notez qu'il peut y avoir un lien entre deux enregistrements ou plus pour avoir la dernière date. La requête ci-dessous utilise simplement une sous-requête dans la clause WHERE pour vérifier la dernière date.

SELECT 
    meta_name, 
    build_notes 
FROM build_wiki_notes_meta 
WHERE 
    software_product_id = 105 AND 
    build_notes IS NOT NULL AND 
    build_notes NOT LIKE '%Currently no notes for this build%' AND 
    date_created = (SELECT MAX(date_created) FROM build_wiki_notes_meta 
        WHERE software_product_id = 105 AND 
          build_notes IS NOT NULL AND 
          build_notes NOT LIKE '%Currently no notes for this build%') 

Si vous êtes certain qu'il n'y aura jamais un dernier disque et/ou ne vous dérange pas seulement toujours revenir un seul enregistrement, nous pouvons simplifier ce qui suit:

SELECT 
    meta_name, 
    build_notes 
FROM build_wiki_notes_meta 
WHERE 
    software_product_id = 105 AND 
    build_notes IS NOT NULL AND 
    build_notes NOT LIKE '%Currently no notes for this build%' 
ORDER BY date_created DESC 
LIMIT 1