Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/78.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
SQL:获取Oracle数据库中按多列分组的最新记录_Sql_Oracle_Join_Group By_Multiple Columns - Fatal编程技术网

SQL:获取Oracle数据库中按多列分组的最新记录

SQL:获取Oracle数据库中按多列分组的最新记录,sql,oracle,join,group-by,multiple-columns,Sql,Oracle,Join,Group By,Multiple Columns,我有如下表站点设置: SITE_ID SETTINGS_CODE UPDATE_TS OTHER_SETTINGS1 OTHER_SETTINGS2 1 CODE1 21-JAN-17 S1 S2 1 CODE1 23-JAN-17 S3 S4 1 CODE2 14-JAN-17 S1

我有如下表站点设置:

SITE_ID   SETTINGS_CODE   UPDATE_TS   OTHER_SETTINGS1   OTHER_SETTINGS2
1         CODE1           21-JAN-17   S1                S2
1         CODE1           23-JAN-17   S3                S4
1         CODE2           14-JAN-17   S1                S4
1         CODE2           18-JAN-17   S1                S3
1         CODE2           21-JAN-17   S1                S2
1         CODE3           04-FEB-17   S8                S9
2         CODE1           21-MAR-17   S1                S2
2         CODE2           21-JAN-17   S2                S5
2         CODE1           21-MAR-17   S1                S5
2         CODE2           10-MAR-17   S1                S5
2         CODE3           10-JAN-17   S1                S5
这是多个站点,每个站点有3种不同类型的设置\u代码。我需要所有站点的每个设置代码的最新记录。大概是这样的:

SITE_ID   SETTINGS_CODE   UPDATE_TS   OTHER_SETTINGS1   OTHER_SETTINGS2
1         CODE1           23-JAN-17   S3                S4
1         CODE2           21-JAN-17   S1                S2
1         CODE3           04-FEB-17   S8                S9
2         CODE1           21-MAR-17   S1                S2
2         CODE2           10-MAR-17   S1                S5
2         CODE3           10-JAN-17   S1                S5
我试图用表本身进行连接,但它会给我重复的记录。例如,我为站点_ID=1的代码1获取了多条相同的记录。这就是我尝试过的:

        select t.SITE_ID, t.SETTINGS_CODE, t.OTHER_SETTINGS1, t.OTHER_SETTINGS2, t.UPDATE_TS
        from SITE_SETTINGS t
        inner join (
            select SITE_ID, SETTINGS_CODE, max(UPDATE_TS) as MaxDate
            from SITE_SETTINGS
            group by SITE_ID, SETTINGS_CODE
            order by SITE_ID, SETTINGS_CODE
        ) tm on t.SITE_ID = tm.SITE_ID and t.SETTINGS_CODE=tm.SETTINGS_CODE and t.UPDATE_TS = tm.MaxDate

我认为我面临的问题是无法按多个列进行分组。有没有办法在没有重复项的情况下获取数据?

您可以使用
行数()
窗口函数:

select * from (
    select SITE_SETTINGS.*, row_number() over(partition by SITE_ID,   SETTINGS_CODE order by UPDATE_TS desc) as rn 
    from SITE_SETTINGS
) t
where rn = 1
SELECT SITE_ID,
       SETTINGS_CODE,
       LATEST_UPDATE_TS,
       OTHER_SETTINGS1,
       OTHER_SETTINGS2 
  FROM 
    (
      SELECT SITE_ID,
             SETTINGS_CODE,
             UPDATE_TS,
             MAX( UPDATE_TS ) OVER ( PARTITION BY SITE_ID,SETTINGS_CODE ORDER BY 
             UPDATE_TS ) AS LATEST_UPDATE_TS,
             OTHER_SETTINGS1,
             OTHER_SETTINGS2   
        FROM SITE_SETTINGS
    )
WHERE UPDATE_TS = LATEST_UPDATE_TS;