我需要构建oracle sql查询来仅对code_poste列执行GROUP BY的帮助。 并为每个组获取具有这些条件的所有列:min(START_DATE),max(END_DATE),max(INACTIF)+该行的其余列。
答案 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;