2017-08-28 59 views
1

这可能是非常简单的解决,但我似乎无法通过Google正确找到答案。Oracle SQL:按他们最近的每个ID列选择所有行

我正在寻找从他们最近的ID拉动表中的所有行,而无需手动键入每个列名称。我有这种已经与以下查询工作:

SELECT 
STANDARD_ID, 
MAX(ID) 

FROM 
HIST_ILLUM_RT 

WHERE STANDARD_ID IS NOT NULL 

GROUP BY 
STANDARD_ID 

其中拉我需要的所有行。我试图通过使用此查询来解决这个问题:

SELECT 
* 

FROM 
HIST_ILLUM_RT 

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

其中提取所有列,但只有一行。例如 Part of the row fetched

应该拉动的行数将会改变超时。

是否有可能拉动所有列以及行而无需手动输入每个列名称(在这种情况下,有超过50)?或者,除了在Oracle sql中手动输入外,别无选择吗?

回答

1

如何使用自己的查询与GROUP BY?

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

嗯..没想到这样做似乎是一个好主意。但这似乎只是做 SELECT * FROM HIST_ILLUM_RT 但它也许可以工作。我会继续看它,谢谢! – spyr0

+0

等待!我错了。它可能实际上在工作,让我仔细检查。 – spyr0

1

试试这个:

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

感谢您的回应!这个工作没有';'但它仍然只选择这两列。我试图选择50列的列,而不必手动输入它们,除非它不可避免 – spyr0

+1

如果您不想也选择行号(通过'select *'),那么您别无选择,只能列出列出来。 –

+0

啊好的。所以我期望创建一个视图,但行数可能会改变,所以我会尽力勇敢地写出每一个。 – spyr0

相关问题