Jump to content

Dúvida em consulta com PostGreSQL


duduml
 Share

Recommended Posts

Bom dia!

pessoal, tendo a seguinte consulta:

SELECT codigopeca,data, SUM(quantidade) as quantidade 
FROM produtos,turnos 
WHERE produtos.hora >= turnos.horainicio AND produtos.hora <= turnos.horafim AND turnos.numeroturno = '2'
AND produtos.data >= '28-06-2010' AND produtos.data <= '28-06-2010' AND codigopeca = codigopeca And data = data 
GROUP BY produtos.codigopeca,produtos.data 
ORDER BY produtos.codigopeca

em que neste caso, turnos.horainicio é 15:00:00 e turnos.horafim é 00:00:00, não é retornado nenhum valor pois 00:00 já é outro dia e ele não assume menor que isso...:/ não há maneira de contornar isto?? como??

desde já, obrigado!

Cumprimentos

"use windows, você merece!"

Link to comment
Share on other sites

Também já fiz assim e não dá....

SELECT codigopeca,data, SUM(quantidade) as quantidade 
FROM produtos,turnos 
WHERE produtos.hora BETWEEN turnos.horainicio AND turnos.horafim AND turnos.numeroturno = '2'
AND produtos.data >= '28-06-2010' AND produtos.data <= '28-06-2010' AND codigopeca = codigopeca And data = data 
GROUP BY produtos.codigopeca,produtos.data 
ORDER BY produtos.codigopeca

o problema é mesmo quando a hora de fim, é menor que a hora de inicio...:/

CUMPS

"use windows, você merece!"

Link to comment
Share on other sites

Bem, peguei numa dúvida que já me haviam ajudado a resolver aqui no fórum e tentei implementar....resulta...mas tenho de andar a verficar se o fim é menor para implementar esta forma...

SELECT codigopeca,data, SUM(quantidade) AS quantidade
FROM produtos,turnos
WHERE CAST(CAST(produtos.data AS Text) || ' ' || CAST(produtos.hora AS Text) AS timestamp) >= to_timestamp('28-06-2010 15:00:00','DD-MM-YYYY HH24:MI:SS') 
AND CAST(CAST(produtos.data AS Text) || ' ' || CAST(produtos.hora AS Text) AS timestamp) < to_timestamp('29-06-2010 00:00:00','DD-MM-YYYY HH24:MI:SS')
AND turnos.numeroturno = '2' AND codigopeca = codigopeca AND data = data
GROUP BY produtos.codigopeca,produtos.data
ORDER BY produtos.codigopeca

EDIT:

ninguém tem outras sugestões??? este não é de todo o melhor método.....

CUMPS

"use windows, você merece!"

Link to comment
Share on other sites

A ver se percebi.

Tens de encontrar registos entre duas determinadas horas de uma qualquer data, certo?

Então tens uma determinada data, produtos.DATA = '2010-06-29', e tens um intervalo de horas, produtos.hora >= '15:00:00' and produtos.hora <= ''23:59:59'.

Isto deve ser suficiente para encontrares os produtos do dia 29 entre as 15 e as 23:59, dado que 00:00 é o inicio do dia seguinte.

10 REM Generation 48K!
20 INPUT "URL:", A$
30 IF A$(1 TO 4) = "HTTP" THEN PRINT "400 Bad Request": GOTO 50
40 PRINT "404 Not Found"
50 PRINT "./M6 @ Portugal a Programar."

 

Link to comment
Share on other sites

pois, mas o problema é esse mesmo M6...

supondo das datas 20-06 e 28-06 das 15h às 02h

isso não me devolve nada...

detectar esses casos e fazer    datainicio > 15:00:00  and datafim < 23:59:59 and datainicio > 00:00:00 and datafim < 02:00:00

o problema é mesmo no and que esta a bolt... :/ já perdi a esperança nisto...🙂

"use windows, você merece!"

Link to comment
Share on other sites

Espera lá.

Qual é o tipo de dados da datainicio e datafim?

Não podes comparar horas com datas...

10 REM Generation 48K!
20 INPUT "URL:", A$
30 IF A$(1 TO 4) = "HTTP" THEN PRINT "400 Bad Request": GOTO 50
40 PRINT "404 Not Found"
50 PRINT "./M6 @ Portugal a Programar."

 

Link to comment
Share on other sites

enganei-me...queria era dizer hora.. os tipos de dados é timewithout...

a consulta é assim:

SELECT produtos.codigopeca,produtos.data, SUM(quantidade) as quantidade 
FROM produtos,turnos 
WHERE produtos.hora > turnos.horainicio AND produtos.hora <= turnos.horafim AND turnos.numeroturno = '2' 
AND produtos.codigopeca = produtos.codigopeca AND produtos.data = produtos.data
GROUP BY produtos.codigopeca,produtos.data 
ORDER BY produtos.codigopeca

CUMPS

"use windows, você merece!"

Link to comment
Share on other sites

Tens duas condições desnecessárias:

AND produtos.codigopeca =  produtos.codigopeca AND produtos.DATA = produtos.DATA

Essa query já funciona?

10 REM Generation 48K!
20 INPUT "URL:", A$
30 IF A$(1 TO 4) = "HTTP" THEN PRINT "400 Bad Request": GOTO 50
40 PRINT "404 Not Found"
50 PRINT "./M6 @ Portugal a Programar."

 

Link to comment
Share on other sites

já tinha reparado...  ?

não...😞 agora experimentei assim:

SELECT produtos.codigopeca,produtos.data, SUM(quantidade) as quantidade 
FROM produtos,turnos
WHERE turnos.numeroturno = '2' 
AND ((produtos.hora > turnos.horainicio AND produtos.hora < '23:59:59') AND (produtos.hora >= '00:00:00' AND produtos.hora <= turnos.horafim))
GROUP BY produtos.codigopeca,produtos.data 
ORDER BY produtos.codigopeca

mas não devolve nada! :/  :wallbash:

"use windows, você merece!"

Link to comment
Share on other sites

OK, vamos por partes.

Primeiro garante que na tabela produtos existem registos que são seleccionados por esses filtros.

Começa por um select * from produtos where data = <data>

Isto garante que há registos para a data <data>.

Depois aplica a hora de inicio.

Começa por um select * from produtos where data = <data> and hora >= '15:00:00'

Isto garante que há registos para a data em causa a partir das 15 horas.

Da mesma forma, aplica a hora de fim.

Depois faz o mesmo para a tabela produtos.

Verifica que os campos de hora e hora inicio são do mesmo tipo e contém os valores valores correctos.

Depois cruza as tabelas e vê qual o filtro/chave que está a falhar e analisa porquê.

Por último cria o sum.

10 REM Generation 48K!
20 INPUT "URL:", A$
30 IF A$(1 TO 4) = "HTTP" THEN PRINT "400 Bad Request": GOTO 50
40 PRINT "404 Not Found"
50 PRINT "./M6 @ Portugal a Programar."

 

Link to comment
Share on other sites

Já fiz isso, repeti agora porque já tinha feito, e cheguei à mesma conclusão...

é quando a hora de fim é menor à hora inicio...

ou seja, se começar às 17 h e acabar às 10h, não dá....

?

"use windows, você merece!"

Link to comment
Share on other sites

Espera, mas se começar às 17h e terminar às 10h então começa às 17h do dia X e termina às 10h do dia X+1, correcto?

10 REM Generation 48K!
20 INPUT "URL:", A$
30 IF A$(1 TO 4) = "HTTP" THEN PRINT "400 Bad Request": GOTO 50
40 PRINT "404 Not Found"
50 PRINT "./M6 @ Portugal a Programar."

 

Link to comment
Share on other sites

RESOLVI  😁

SELECT produtos.codigopeca,produtos.DATA, SUM(quantidade) AS quantidade
FROM produtos,turnos
WHERE turnos.numeroturno = '2'
AND not (produtos.hora < turnos.horainicio AND produtos.hora >= turnos.horafim )
GROUP BY produtos.codigopeca,produtos.DATA
ORDER BY produtos.codigopeca

Obrigado

CUMPS

"use windows, você merece!"

Link to comment
Share on other sites

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now
 Share

×
×
  • Create New...

Important Information

By using this site you accept our Terms of Use and Privacy Policy. We have placed cookies on your device to help make this website better. You can adjust your cookie settings, otherwise we'll assume you're okay to continue.