2017-08-28 1 views
1

Ceci est probablement très simple à résoudre, mais je n'arrive pas à le trouver correctement pour trouver la réponse.Oracle SQL: Sélectionnez TOUTES les lignes par leur colonne ID la plus récente.

Je cherche à tirer toutes les lignes d'une table par leur ID le plus récent sans taper manuellement chaque nom de colonne. J'ai ce genre de travail déjà avec la requête suivante:

SELECT 
STANDARD_ID, 
MAX(ID) 

FROM 
HIST_ILLUM_RT 

WHERE STANDARD_ID IS NOT NULL 

GROUP BY 
STANDARD_ID 

Qui tire toutes les lignes dont j'ai besoin. Je suis un peu d'essayer de contourner ce problème en utilisant cette requête:

SELECT 
* 

FROM 
HIST_ILLUM_RT 

WHERE ID = (SELECT MAX(ID) 
      FROM HIST_ILLUM_RT) 

qui récupère toutes les colonnes, mais une seule ligne. E.g Part of the row fetched

Le nombre de lignes qui doivent être tirées changera au fil du temps.

Est-il possible de tirer toutes les colonnes ainsi que les lignes sans taper manuellement chaque nom de colonne (dans ce cas, il y en a plus de 50)? Ou n'y a-t-il pas d'autre choix que de le saisir manuellement dans Oracle SQL?

Répondre

1

Que diriez-vous d'utiliser votre propre requête avec GROUP BY?

SELECT * 
FROM HIST_ILLUM_RT 
WHERE ID IN (
    SELECT MAX(ID) 
    FROM HIST_ILLUM_RT GROUP BY STANDARD_ID 
) 
+0

Hmm .. N'a pas pensé à faire cela semble être une bonne idée. Celui-ci semble cependant juste faire SELECT * FROM HIST_ILLUM_RT Mais cela pourrait fonctionner peut-être. Je vais continuer à le regarder merci! – spyr0

+0

ATTENDEZ! J'avais tort. Cela pourrait effectivement fonctionner, laissez-moi vérifier. – spyr0

1

Essayez ceci:

WITH CTE AS(

     SELECT STANDARD_ID,ID, 
       ROW_NUMBER() OVER(Partition BY ID ORDER BY ID DESC) RN 
     FROM HIST_ILLUM_RT 
     WHERE STANDARD_ID IS NOT NULL 
) 
SELECT STANDARD_ID,ID 
FROM CTE 
WHERE RN = 1; 
+0

Merci pour la réponse! Cela fonctionne sans le ';' mais il sélectionne toujours seulement ces deux colonnes. J'essaie de sélectionner les colonnes 50-ish sans avoir à les taper manuellement sauf si c'est inévitable – spyr0

+1

Si vous ne voulez pas sélectionner le numéro de ligne (via un select * '), vous n'avez pas d'autre choix que de lister les colonnes. –

+0

Ah d'accord. Donc, je cherchais à créer une vue à partir de ce point, mais les numéros de rangée sont susceptibles de changer alors je vais essayer d'être courageux et écrire chacun d'eux. – spyr0