Sql 在oracle中选择以返回最新的行

Sql 在oracle中选择以返回最新的行,sql,database,oracle,greatest-n-per-group,Sql,Database,Oracle,Greatest N Per Group,我有一个票务系统(itsm),我需要从同一张票的许多其他记录中返回表中的最新记录 在上面的图片上,您可以看到select的输出(我将在下面粘贴它)。 要知道PBTI_WORKORDER_ID列显示了票证ID,我要做的只是显示最大的请求ID(图像上的第一行) 选择是: SELECT MAX(REQUEST_ID), (PBTI_WORKORDER_ID), PBTI_IDREQUISICAO, TO_CHAR(SECS_TO_DATE(PBTI_DTABERTURA),'DD/MM/YYYY

我有一个票务系统(itsm),我需要从同一张票的许多其他记录中返回表中的最新记录

在上面的图片上,您可以看到select的输出(我将在下面粘贴它)。 要知道PBTI_WORKORDER_ID列显示了票证ID,我要做的只是显示最大的请求ID(图像上的第一行)

选择是:

SELECT 
MAX(REQUEST_ID),
(PBTI_WORKORDER_ID),
PBTI_IDREQUISICAO,
TO_CHAR(SECS_TO_DATE(PBTI_DTABERTURA),'DD/MM/YYYY HH24:MI:SS') AS DATA_CRIACAO,
PBTI_GRUPOSUPORTEATUAL                                         AS GRUPO_ATUAL,
TO_CHAR(SECS_TO_DATE(PBTI_DATAENTRADAGRUPO),'DD/MM/YYYY')      AS DATA_ENTRADA,
TO_CHAR(SECS_TO_DATE(PBTI_DATASAIDAGRUPO),'DD/MM/YYYY')        AS DATA_SAIDA_GRUPO,
PBTI_PROXIMOGRUPOSUPORTE                                       AS PROXIMO_GRUPO,
REQUEST_ASSIGNEE,
CATEGORIZATION_TIER_1,
CATEGORIZATION_TIER_2,
CATEGORIZATION_TIER_3,
CUSTOMER_ORGANIZATION,
PBTI_MCU_ORG
FROM PBTI_TABELA_INDICADORES
WHERE PBTI_GRUPOSUPORTEATUAL = 'CENTRAL HD - TRATAMENTO'
GROUP BY (REQUEST_ID),
(PBTI_WORKORDER_ID),
(PBTI_IDREQUISICAO),
(PBTI_DTABERTURA),
(PBTI_GRUPOSUPORTEATUAL),
(PBTI_DATAENTRADAGRUPO),
(PBTI_DATASAIDAGRUPO),
(PBTI_PROXIMOGRUPOSUPORTE),
(REQUEST_ASSIGNEE),
(CATEGORIZATION_TIER_1),
(CATEGORIZATION_TIER_2),
(CATEGORIZATION_TIER_3),
(CUSTOMER_ORGANIZATION),
(PBTI_MCU_ORG)
ORDER BY PBTI_DATAENTRADAGRUPO DESC;
MAX(用于select子句)应该只带第一行,不是吗


tks

实现这一点的一种方法是生成一组数据,其中包括每个票据(B)的最大请求ID。然后,使用所有记录将该集合连接回基本集合(A),从而使用该连接仅保留每个票证/请求的相关“最新”记录

像这样的

SELECT A.* 
FROM PBTI_TABELA_INDICADORES A
INNER JOIN  (SELECT max(request_ID) Request_Id, PBTI_WorkORder_Id, PBTI_IDREQUISICAO
             FROM PBTI_TABELA_INDICADORES
             GROUP BY PBTI_WorkORder_Id, PBTI_IDREQUISICAO) B
  on A.Request_Id = B.Request_Id
 and A.PBTI_WorkORder_Id = B.PBTI_WorkORder_Id
 and A.PBTI_IDREQUISICAO = B.PBTI_IDREQUISICAO
以这种方式使用的MAX()将为您提供所有选定行的MAX(ID),但不会过滤来自该特定行的其余数据。要做到这一点,您需要在WHERE子句中筛选到该记录