Oracle SQL:按每个最新ID列选择所有行

时间:2017-08-28 11:45:53

标签: sql oracle greatest-n-per-group

这可能很容易解决,但我似乎无法正确地找到答案。

我希望通过最新的ID从表中提取所有行,而无需手动键入每个列名。我有这种已经使用以下查询:

<p>
    <input type="radio" id="channel_id" name="<?php echo esc_attr( $this->get_field_name( 'channel_type' ) ); ?>" value="channelid" <?php echo ($channel_type == 'channelid') ? 'checked' : ''; ?>>
    <label for="channel_id">Channel ID</label><br>
    <input type="radio" id="channel_name" name="<?php echo esc_attr( $this->get_field_name( 'channel_type' ) ); ?>" value="channel" <?php echo ($channel_type == 'channel') ? 'checked' : ''; ?>>
    <label for="channel_name">Channel name</label>
</p>

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

SELECT 
 STANDARD_ID,
 MAX(ID)

FROM
 HIST_ILLUM_RT

WHERE STANDARD_ID IS NOT NULL

GROUP BY 
 STANDARD_ID

它获取所有列但只获取一行。例如 Part of the row fetched

应拉的行数会随时间变化。

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

2 个答案:

答案 0 :(得分: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;

答案 1 :(得分:1)

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

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