Em algumas situações, é necessário que a cláusula "group by" seja personalizada. Nesta caso é possível indicar a API para ignorar o group by gerado automaticamente e para que seja utilizado um personalizado. Para isto, utiliza-se o método groupBy conforme exemplo abaixo:
__includeOnce('ufs:/uwl/all.js');
var alocacaoMaior = IQuery.from(-1895833131 /* Requisitos num Sprint */);
alocacaoMaior = alocacaoMaior.where( [ { field: "SPRINT", operator: "=", value: 3454359 } ] )
alocacaoMaior = alocacaoMaior.groupBy( [ { field: "TAREFA"} ] )
var alocacao = IQuery.from(-1895833131 /* Requisitos num Sprint */);
alocacao = alocacao.where(
[
{
field: "CHAVE",
operator: "=",
value: alocacaoMaior.column(
[
{ literal: "cast( substr( max(" +
"cast( extract( year from INICIO ) as char(4) ) || " +
"substr( '00' || cast( extract( month from INICIO ) as char(2) ), length('00' || cast( extract( month from INICIO ) as varchar(2) )) - 1, 2 ) || " +
"substr( '00' || cast( extract( day from INICIO ) as char(2) ), length('00' || cast( extract( day from INICIO ) as varchar(2) )) - 1, 2 ) || " +
"substr( '0000000000' || cast( CHAVE as varchar(10) ), length('0000000000' || cast( CHAVE as varchar(10) )) - 9, 10 ) ), 9, 10) as integer) as CHAVE" }
]
)
}
] );
alocacao = alocacao.column( [ { field: "CHAVE"}, { field: "INICIO"}, { field: "TAREFA"} ] )
alocacao.toSql();
Irá gerar o sql abaixo:
SELECT chave,
inicio,
sprint,
tarefa
FROM vinculamovimentac
WHERE chave IN (SELECT Cast(Substr(Max(Cast(Extract(year FROM inicio) AS CHAR(4
))
|| Substr('00'
|| Cast(Extract(
month FROM inicio) AS
CHAR(2))
,
Length('00'
|| Cast(Extract(
month FROM
inicio) AS
VARCHAR(2))) - 1, 2)
|| Substr('00'
|| Cast(Extract(day FROM
inicio) AS
CHAR(2)),
Length('00'
|| Cast(
Extract(day FROM inicio) AS
VARCHAR(2)))
- 1, 2)
|| Substr('0000000000'
|| Cast(chave AS VARCHAR(10)),
Length
(
'0000000000'
|| Cast(chave AS
VARCHAR(10)
))
- 9,
10)), 9, 10) AS INTEGER) AS CHAVE
FROM vinculamovimentac
WHERE classe = -1895833131 /* Requisitos num Sprint */
AND sprint = 3454359
GROUP BY tarefa)