2010-04-29 8 views
0

Je tourne cette requêtemysql requête dernière date

SELECT sh.*, 
     u.initials AS initals 
    FROM database1.table1 AS sh 
    JOIN database2.user AS u ON u.userID = sh.userid 
WHERE id = 123456 
    AND dts = (SELECT MAX(dts) from database1.table1) 
ORDER BY sort_by, category 

Dans le tableau 1, j'ai des dossiers comme celui-ci

dts       status     category   sort_by 
2010-04-29 12:20:27  Civil Engineers   Occupation 1 
2010-04-28 12:20:27  Civil Engineers   Occupation 1 
2010-04-28 12:20:54 Married    Marital Status 2  2010-04-28 12:21:15 Smoker    Tobbaco 3 
2010-04-27 12:20:27  Civil Engineers   Occupation 1 
2010-04-27 12:20:54 Married    Marital Status 2  2010-04-27 12:21:15 Smoker    Tobbaco 3 
2010-04-26 12:20:27  Civil Engineers   Occupation 1 
2010-04-26 12:20:54 Married    Marital Status 2  2010-04-26 12:21:15 Smoker    Tobbaco 3 

Si vous regardez mes données, je choisis la dernière entrée par catégorie et sort_id. Cependant, dans certains cas, comme le 29 (2010-04-29 12:20:27), je n'ai qu'un seul enregistrement. Donc, dans ce cas, je veux montrer l'occupation pour la dernière fois, puis le reste d'entre eux (plus tard). Mais actuellement, il affiche seulement une ligne.

+0

Vous devez formater vraiment votre code, et de mettre votre table dans une boîte de code. –

+0

Je ne peux pas déterminer la structure de la colonne. –

+0

Ceci: 'AND dts = (SELECT MAX (dts) de database1.table1)' ... vous assurera que vous obtenez seulement les enregistrements qui correspondent à cette valeur dts. Vous avez besoin de grouper par critères pour subdiviser les valeurs dts de manière appropriée. –

Répondre

1

essayant mieux deviner ce que vous avez, votre requête devrait être ajustée de toute façon, quelque chose comme

SELECT 
     sh.dts, 
     cast(if(preAgg1.totalPerCatSort = 1, sh.status, ' ') as char(20)) 
      as SingleStatus, 
     sh.category, 
     sh.sort_by, 
     u.initials AS initals 
    FROM 
     database1.table1 AS sh, 
     database2.user AS u, 
     (select 
       t1.category, 
       t1.sort_by, 
       max(dts) maxdts, 
       count(*) totalPerCatSort 
      from 
       database1 t1 
      group by 
       t1.category, 
       t1.sort_by) preAgg1 
    WHERE 
     sh.userid = u.userID 
    and sh.sort_by = preAgg1.sort_by 
    and sh.category = preAgg1.category 
    and sh.dts = preAgg1.maxdts 
    and id = 123456 ?? Should this actually be the UserID column ?? 
    ORDER BY 
    sort_by, 
    category 

vous devrez peut-être appliquer le « ID = 123456 » dans le sous- « preAgg1 » sélectionnez, mais encore une fois, ne savez pas à quel ID cette colonne/table était applicable, sinon, vous pourriez avoir d'autres entrées de date par d'autres "utilisateurs" et pas la même pour la personne candidate que vous recherchez ... Votre appel.

par votre souci d'obtenir tous les dossiers, je voudrais juste supprimer votre qualificatif « et ID = 123456 » et tout devrait être bon

+0

ma requête doit sélectionner toutes les lignes pour pouvoir tester. Comment puis-je le faire sélectionner toutes les lignes afin que je puisse tester? Merci – Autolycus

Questions connexes