Oracle汇总分组依据

时间:2020-05-15 20:29:57

标签: sql oracle

我需要构建oracle sql查询来仅对code_poste列执行GROUP BY的帮助。 并为每个组获取具有这些条件的所有列:min(START_DATE),max(END_DATE),max(INACTIF)+该行的其余列。 enter image description here

enter image description here

1 个答案:

答案 0 :(得分:0)

如果您提供可用的数据集,则会获得更好的帮助。我认为从您的描述中,您想要的是整行数据,但要包含该组的最早和最新(开始/结束)日期。为此,您将使用分析功能。

在下面的示例中,测试集是生成的一组随机数据。您将在select语句而不是testset中使用表。关键是最后一个select语句,它将返回测试集中的所有数据,以及按名称和ID细分的开始和结束日期。

我生成了999行,以便我们可以重复输入name / id,以便您了解最小/最大的工作方式。我只获取前50行,足以说明此工作。

WITH
testset AS
    (SELECT DBMS_RANDOM.string( 'u', 1 )                          AS name
          , ROUND( DBMS_RANDOM.VALUE( 1, 10 ) )                   AS id
          , ROUND( DBMS_RANDOM.VALUE( 0, 1000 ) )                 AS r100
          , TRUNC( SYSDATE + DBMS_RANDOM.VALUE( -100, 100 ) )     AS dateof
       FROM dba_objects
      WHERE ROWNUM < 1000)
SELECT name
     , id
     , r100
     , dateof
     , MIN( dateof ) OVER (PARTITION BY name, id)     AS start_date
     , MAX( dateof ) OVER (PARTITION BY name, id)     AS end_date
  FROM testset
  order by name, id, dateof
  fetch first 50 rows only;