2010-09-08 5 views
3

Utilisation Pervasive SQL, j'ai un jeu de résultats:Sélectionnez la ligne de date max à partir des résultats

Tp_No  Name  State Eff_Date  Actual  Billed 
1006  ABC  TN  2006-07-01  .1   .5 
1006  ABC  TN  2008-02-15  .27   .6 
1006  ABC  TN  2010-09-01  .37   .7 
1022  Widget  TN  2006-07-01  .1   .5 
1022  Widget  TN  2007-02-22  .27   .6 
1022  Widget  TN  2009-01-01  .37   .7 
1022  Widget  TN  2010-11-11  .38   .71 

Ce que je veux est la ligne pour chaque client, société et État où la date est MAX:

Tp_No  Name  State Eff_Date  Actual  Billed 
1006  ABC  TN  2010-09-01  .37   .7 
1022  Widget  TN  2010-11-11  .38   .71 

Ce qui le rend un peu plus difficile est le fait que l'ensemble de résultats d'origine est le résultat d'une requête, pas seulement directement à partir d'une table.

select a.tp_no, c.name, a.state, b.eff_date, a.er_rate as 'Actual', b.er_rate as 'Billed' 
from "PR_TSUTA" as a 
left join CL_SUTA as b on(a.tp_no=b.loc_no) 
left join CL_MAST as c on(b.loc_no=c.loc_no) 
where c.yn_17 = 'A' and a.er_rate != b.er_rate 
order by a.tp_no 

Merci à l'avance

+0

Qu'est-ce que a.tp_no? Est-ce la même chose que ClientNum? –

+0

Oui. Je viens d'éditer la question pour refléter les noms de cols corrects de la requête. – jeremib

Répondre

3

Essayez ceci:

SELECT 
    a.tp_no AS ClientNum, 
    c.name AS Company, 
    a.state AS State, 
    MAX(b.eff_date) AS Date 
FROM "PR_TSUTA" AS a 
LEFT JOIN CL_SUTA AS b ON a.tp_no = b.loc_no 
LEFT JOIN CL_MAST AS c ON b.loc_no = c.loc_no 
WHERE c.yn_17 = 'A' AND a.er_rate != b.er_rate 
GROUP BY a.tp_no, c.name, a.state 

Si vous avez également besoin des valeurs de réelles et Facturé alors vous devriez utiliser une requête greatest-n-per-group.

+0

Désolé, je suppose que cela fait une grande différence si j'ai besoin des taux ou non ... Oui, je le fais. Je vais vérifier le lien que vous avez posté. – jeremib

Questions connexes