SQL如果匹配某个条件,则检索最后3条记录。通过多个表上的连接复杂化

时间:2016-06-29 10:40:09

标签: sql oracle-sqldeveloper

[]

嗨伙计,

观察上述ERD,任何人都可以帮助我解决以下问题。

我希望在CI_MR_REM表格上按照GEO_VALCI_PREM_GEO表格中获取最新的3条记录。

到目前为止,我已经能够对此部分进行排序,但我需要进一步过滤列表如果所有3条记录在READER_REM_CD上的CI_MR_REM字段中具有特定值/ p>

这是我到目前为止开发的SQL。有什么想法吗?

SELECT * FROM

    (
      SELECT PGEO.GEO_VAL AS GPRN,SPMTRHIS.MTR_CONFIG_ID,MR1.MR_ID,MR1.READ_DTTM,MR1.USE_ON_BILL_SW,MRREM.READER_REM_CD,

      ROW_NUMBER() OVER (PARTITION BY PGEO.GEO_VAL ORDER BY MR1.READ_DTTM DESC) AS READ_NUMBER

      FROM CI_SP SP,CI_SP_MTR_HIST SPMTRHIS,CI_MR MR1,CI_MR_REM MRREM,CI_PREM_GEO PGEO 

      WHERE MR1.MR_ID = MRREM.MR_ID
      AND SPMTRHIS.MTR_CONFIG_ID = MR1.MTR_CONFIG_ID
      AND SP.SP_ID = SPMTRHIS.SP_ID
      AND SP.PREM_ID = PGEO.PREM_ID

      AND PGEO.GEO_TYPE_CD = 'GPRN'
    )
WHERE READ_NUMBER <=3

为了澄清,下面的截图是我目前的结果

我需要对结果进行进一步过滤,以便保留突出显示的0954765,因为它的所有3个最后一个值都是GA,而0198645,0638843,1091524和1160618这样的值不应该像READER_REM_CD列中的值一样混合物

[]

1 个答案:

答案 0 :(得分:0)

编写如下代码

WHERE READ_NUMBER between 1 and 3