SQL查询可根据特定的列值以及插入的降序过滤记录

时间:2018-09-19 13:16:11

标签: sql oracle

我有此表操作-

AMOUNT  CLAIM_TYPE      INSERTED_DATE
100     SETT            09-SEP-18 10.37.50
1006    ATTAA           09-SEP-18 10.37.54
102320  FIXX            09-SEP-18 10.37.55
10077   SETT            09-SEP-18 10.37.56
10034   FIXX            09-SEP-18 10.37.57
900     ATTAA           09-SEP-18 10.37.58

我要基于CLAIM_TYPE列值过滤出记录,以使 CLAIM_TYPE值仅出现一次,并且该记录必须是最新记录(插入日期)。

SELECT TOTAL_RECEIVED_AMOUNT, CLAIM_TYPE, INSERTED_DATE
FROM OPERATION 
WHERE CLAIM_TYPE IN 
('FIXX', 'SETT', 'ATTAA', 'PLACC', 'THREE', 'SIXX','TWELL') ORDER BY INSERTED_DATE DESC ;

AMOUNT    CLAIM_TYPE  INSERTED_DATE
900       ATTAA       09-SEP-18 10.37.58
10034     FIXX        09-SEP-18 10.37.57
10077     SETT        09-SEP-18 10.37.56
102320    FIXX        09-SEP-18 10.37.55
1006      ATTAA       09-SEP-18 10.37.54
100       SETT        09-SEP-18 10.37.50

预期结果是-

    AMOUNT    CLAIM_TYPE  INSERTED_DATE
    900       ATTAA       09-SEP-18 10.37.58
    10034     FIXX        09-SEP-18 10.37.57
    10077     SETT        09-SEP-18 10.37.56

在尝试计数,具有和分组依据子句时,我很难获得相同的结果。请提出建议。

2 个答案:

答案 0 :(得分:1)

您可以使用ROW_NUMBER()

SELECT op.*
FROM (SELECT TOTAL_RECEIVED_AMOUNT, CLAIM_TYPE, INSERTED_DATE,
             ROW_NUMBER() OVER (PARTITION BY CLAIM_TYPE ORDER BY INSERTED_DATE DESC) AS seq
      FROM OPERATION  op
      WHERE CLAIM_TYPE IN ('FIXX', 'SETT', 'ATTAA', 'PLACC', 'THREE', 'SIXX','TWELL')
     ) op
WHERE seq = 1;

答案 1 :(得分:1)

使用相关子查询

BaseName