Banco Firebird (Problemas ao retornar apenas o primeiro registro)
03/09/2015
0
Estou tentando retornar apenas o maior registro do ORDXFUN na consulta abaixo, porém não estou conseguindo, vocês poderiam me ajudar?
select
ORDSERV.TAG AS OS, ORDSERV.DATPRO2 AS DATA,
USER_ANALIS.U_DESCRICA AS ANALISE,
MAX (ORDXFUN.DATHORFIM) AS DATHORFIM
from ORDSERV
inner join USER_ANALIS on ORDSERV.R_USER_ANALIS_U_PK_REDUZIDO=USER_ANALIS.U_PK_REDUZIDO
inner join ORDXFUN ON ORDXFUN.CODEMP=ORDSERV.CODEMP AND ORDXFUN.CODORD=ORDSERV.CODORD
WHERE ORDSERV.STATORD = 'A'
GROUP BY ORDSERV.TAG, ORDSERV.DATPRO2, USER_ANALIS.U_DESCRICA, ORDXFUN.DATHORFIM
Retorno:
[img]http://arquivo.devmedia.com.br/forum/imagem/451341-20150903-100122.jpg[/img]
João Cristo
Posts
03/09/2015
Fabio Basso
id_teste_data integer not null,
datahora timestamp,
data date,
primary key (id_teste_data));
insert into teste_data values (1, '09/03/2015 10:00:00', '09/03/2015');
insert into teste_data values (2, '09/03/2015 11:00:00', '09/03/2015');
insert into teste_data values (3, '09/03/2015 12:00:00', '09/03/2015');
insert into teste_data values (4, '09/04/2015 10:01:00', '09/04/2015');
insert into teste_data values (5, '09/04/2015 10:01:01', '09/04/2015');
insert into teste_data values (6, '09/04/2015 10:01:02', '09/04/2015');
select * from teste_data;
select data, max(datahora)
from teste_data
group by data;
Neste exemplo acima, o resultado será sempre a última hora, agrupado por dia.
No exemplo que vc mandou, foi agrupado pelo campo ORDXFUN.DATHORFIM , e eu acho que este campo está armazenando data e hora, então ele não vai apenas um horário, pois não está agrupado apenas pelo dia.
03/09/2015
João Cristo
03/09/2015
Fabio Basso
select
ORDSERV.TAG AS OS, ORDSERV.DATPRO2 AS DATA,
USER_ANALIS.U_DESCRICA AS ANALISE,
MAX (ORDXFUN.DATHORFIM) AS DATHORFIM
from ORDSERV
inner join USER_ANALIS on ORDSERV.R_USER_ANALIS_U_PK_REDUZIDO=USER_ANALIS.U_PK_REDUZIDO
inner join ORDXFUN ON ORDXFUN.CODEMP=ORDSERV.CODEMP AND ORDXFUN.CODORD=ORDSERV.CODORD
WHERE ORDSERV.STATORD = 'A'
GROUP BY ORDSERV.TAG, ORDSERV.DATPRO2, USER_ANALIS.U_DESCRICA, ORDSERV.DATPRO2
03/09/2015
João Cristo
SELECT
ORDSERV.TAG AS OS,
ORDSERV.DATPRO, MIN(ORDXFUN.DATHORINI) AS DATHORINI, MAX(ORDXFUN.DATHORFIM) AS DATHORFIM,
datediff(hour, ORDSERV.DATPRO, ORDXFUN.DATHORINI) || ':' ||mod(datediff (minute, ORDSERV.DATPRO, ORDXFUN.DATHORINI), 60) as tempototal
FROM ORDSERV
inner join USER_ANALIS on ORDSERV.R_USER_ANALIS_U_PK_REDUZIDO=USER_ANALIS.U_PK_REDUZIDO
inner join ORDXFUN ON ORDXFUN.CODEMP=ORDSERV.CODEMP AND ORDXFUN.CODORD=ORDSERV.CODORD
WHERE ORDSERV.STATORD='A'
AND ORDSERV.CODEMP=:CODEMP
GROUP BY ORDSERV.TAG, USER_ANALIS.U_DESCRICA, ORDSERV.DATPRO, ORDXFUN.DATHORFIM, ORDXFUN.DATHORINI
ORDER BY 1
Retorno:
[img]http://arquivo.devmedia.com.br/forum/imagem/451341-20150903-115602.jpg[/img]
03/09/2015
Fabio Basso
Você está agrupando novamente por ORDXFUN.DATHORINI, vc precisa agrupar por ORDSERV.DATPRO2.
Quanto aos zeros, eu não consegui simular isso aqui. Tem como vc postar os tipos de dados dessas tabelas (O DDL das tabelas, ou seja o código fonte de criação das tabelas)?
03/09/2015
João Cristo
SELECT
ORDSERV.TAG AS OS,
ORDSERV.DATPRO, MIN(ORDXFUN.DATHORINI) AS DATHORINI, MAX(ORDXFUN.DATHORFIM) AS DATHORFIM,
datediff(hour, ORDSERV.DATPRO, ORDXFUN.DATHORINI) || ':' ||mod(datediff (minute, ORDSERV.DATPRO, ORDXFUN.DATHORINI), 60) as tempototal
FROM ORDSERV
inner join USER_ANALIS on ORDSERV.R_USER_ANALIS_U_PK_REDUZIDO=USER_ANALIS.U_PK_REDUZIDO
inner join ORDXFUN ON ORDXFUN.CODEMP=ORDSERV.CODEMP AND ORDXFUN.CODORD=ORDSERV.CODORD
WHERE ORDSERV.STATORD='F'
AND ORDSERV.CODEMP=:CODEMP
GROUP BY ORDSERV.TAG, ORDSERV.DATPRO2, USER_ANALIS.U_DESCRICA, ORDSERV.DATPRO2
ORDER BY 1
Retorno:
[img]http://arquivo.devmedia.com.br/forum/imagem/451341-20150903-170624.jpg[/img]
04/09/2015
João Cristo
04/09/2015
Fabio Basso
select nome_cliente, sum(contareceber.valor_pendente) as valor_pendente
from cliente join contareceber on (cliente.id_cliente = contareceber.id_cliente)
group by nome_cliente
04/09/2015
João Cristo
Dynamic SQL Error
SQL error code = -104
Invalid expression in the select list (not contained in either an aggregate function or the GROUP BY clause)
04/09/2015
Fabio Basso
SELECT ORDSERV.TAG AS OS, ORDSERV.DATPRO, MIN(ORDXFUN.DATHORINI) AS DATHORINI, MAX(ORDXFUN.DATHORFIM) AS DATHORFIM,
datediff(hour, ORDSERV.DATPRO, ORDXFUN.DATHORINI) || ':' ||mod(datediff (minute, ORDSERV.DATPRO, ORDXFUN.DATHORINI), 60) as tempototal
GROUP BY ORDSERV.TAG, ORDSERV.DATPRO2, USER_ANALIS.U_DESCRICA, ORDSERV.DATPRO2
O GROUP BY tem que ser na mesma sequência do select:
SELECT ORDSERV.TAG AS OS, ORDSERV.DATPRO, MIN(ORDXFUN.DATHORINI) AS DATHORINI, MAX(ORDXFUN.DATHORFIM) AS DATHORFIM,
GROUP BY ORDSERV.TAG, ORDSERV.DATPRO2, USER_ANALIS.U_DESCRICA, ORDSERV.DATPRO2
repare que o DATPRO2 não está definido no SELECT
04/09/2015
João Cristo
SELECT
ORDSERV.TAG, ORDSERV.DATPRO,
USER_ANALIS.U_DESCRICA AS ANALISE,
MIN (ORDXFUN.DATHORINI) AS DATHORINI,
MAX (ORDXFUN.DATHORFIM) AS DATHORFIM,
SUM(ORDXFUN.DATHORFIM - ORDXFUN.DATHORINI)*24 AS TOTALHORAS,
datediff(hour, ORDSERV.DATPRO, ORDXFUN.DATHORINI) || ':' ||mod(datediff (minute, ORDSERV.DATPRO, ORDXFUN.DATHORINI), 60) as tempototal
from ORDSERV
inner join USER_ANALIS on ORDSERV.R_USER_ANALIS_U_PK_REDUZIDO=USER_ANALIS.U_PK_REDUZIDO
inner join ORDXFUN ON ORDXFUN.CODEMP=ORDSERV.CODEMP AND ORDXFUN.CODORD=ORDSERV.CODORD
WHERE ORDSERV.STATORD = 'F'
GROUP BY ORDSERV.TAG, ORDSERV.DATPRO, USER_ANALIS.U_DESCRICA
Erro:
Dynamic SQL Error
SQL error code = -104
Invalid expression in the select list (not contained in either an aggregate function or the GROUP BY clause)
04/09/2015
Fabio Basso
datediff(hour, ORDSERV.DATPRO, ORDXFUN.DATHORINI) || ':' ||mod(datediff (minute, ORDSERV.DATPRO, ORDXFUN.DATHORINI), 60) as tempototal
não tem nenhum código de agrupamento(SUM por exemplo) para este campo.
04/09/2015
João Cristo
04/09/2015
Fabio Basso
04/09/2015
João Cristo
[img]http://arquivo.devmedia.com.br/forum/imagem/451341-20150904-103821.jpg[/img]
[img]http://arquivo.devmedia.com.br/forum/imagem/451341-20150904-103829.jpg[/img]
Clique aqui para fazer login e interagir na Comunidade :)