2017-10-05 5 views
-1

Voici donc un cas où l'une des colonnes d'une table a les mêmes valeurs pour plusieurs enregistrements, mais la colonne Date a des valeurs incrémentielles.Sélection SQL pour afficher le dernier enregistrement

ID| PAY_CODE| RATE | Date 
--------------------------------- 
1 | 1111 | 50 | 2017-01-01 
2 | 1111 | 50 | 2017-02-01 
3 | 1111 | 50 | 2017-03-11 
4 | 1111 | 50 | 2017-05-21 

Comment puis-je imprimer que le dernier enregistrement si la dernière entrée Date est inconnu?

Résultat attendu:

ID| PAY_CODE| RATE | Date 
--------------------------------- 
4 | 1111 | 50 | 2017-05-21 

je besoin d'une requête SQL qui compare en interne la colonne Date et retourne la valeur la plus élevée (date récente dans ce cas) - est-ce possible?

Répondre

2

Je pense que cela fait ce que vous voulez:

select t.* 
from t 
where t.date = (select max(t2.date) from t t2); 
+0

Th retournera plusieurs lignes si elles sont liées pour la dernière date. – MT0

+0

@ MT0. . . "mais la colonne Date a des valeurs incrémentielles." –

0
select t.* 
from (select * from table order by date desc) t 
where rownum < 2 
1

Vous pouvez utiliser la fonction de fenêtre rank:

SELECT id, pay_code, rate, date 
FROM (SELECT id, pay_code, rate, date, RANK() OVER (ORDER BY data DESC) AS rk 
     FROM mytable) t 
WHERE rk = 1 
+0

Cela retournera plusieurs lignes si elles sont liées pour la dernière date; utiliser 'ROW_NUMBER' au lieu de' RANK' ne retournera qu'une seule ligne. – MT0

+0

@ MT0 OP a demandé les lignes de la dernière date. Autant que je comprenne, permettre plusieurs résultats est le comportement prévu. Si l'exigence est en effet juste de retourner une de ces lignes, 'row_number' va en effet faire l'affaire, – Mureinik

+0

L'OP a demandé" Comment puis-je imprimer seulement le dernier enregistrement "mais, indépendamment de ce qu'ils veulent," RANK "ou' ROW_NUMBER' le résoudra. – MT0

0

Je pense que vous devriez utiliser SELECT * FROM YOUR_TABLE T WHERE T.DATE = (SELECT MAX(DATE) FROM YOUR_TABLE) cette façon, vous vous assurez saisir les dernier résultat, d'autres solutions utilisant TOP ne pouvaient pas fonctionner comme prévu