LINUX.ORG.RU

История изменений

Исправление Aswed, (текущая версия) :

Ну как минимум ты можешь не делать два подзапроса user_null и user_not_null, а сделать один с тем же DISTINCT. У тебя же запросы одинаковые. Да и ar можно не делать подзапросом, а просто джоином ограничиться. Что-то типа:

            SELECT DISTINCT
                pp."Account" AS "Account",
                pp."User" AS "Responsible",
                pp."Event" AS "Event",
                array_agg(DISTINCT pp."Subscriber") AS "Subscriber",
                MIN(pp."EndDate") AS "MinimalDate"
            FROM "Documents" pp         
                INNER JOIN "ActualDocuments" as ar ON (
			        pp."Account" = ar."Account" AND
				    pp."Event" = ar."Event"
			    )
            WHERE                
                ar."Account" = ANY('{3344433}'::bigint[]) AND
                ar."MinimalDate" < '2021-09-20'::date
            GROUP BY pp."Account", pp."User", pp."Event"

Так три запроса схлопываются в один

Исходная версия Aswed, :

Ну как минимум ты можешь не делать два подзапроса user_null и user_not_null, а сделать один с тем же DISTINCT. У тебя же запросы одинаковые. Да и ar можно не делать позавпросом, а просто джоином ограничиться. Что-то типа:

            SELECT DISTINCT
                pp."Account" AS "Account",
                pp."User" AS "Responsible",
                pp."Event" AS "Event",
                array_agg(DISTINCT pp."Subscriber") AS "Subscriber",
                MIN(pp."EndDate") AS "MinimalDate"
            FROM "Documents" pp         
                INNER JOIN "ActualDocuments" as ar ON (
			        pp."Account" = ar."Account" AND
				    pp."Event" = ar."Event"
			    )
            WHERE                
                ar."Account" = ANY('{3344433}'::bigint[]) AND
                ar."MinimalDate" < '2021-09-20'::date
            GROUP BY pp."Account", pp."User", pp."Event"

Так три запроса схлопываются в один