Criar sql para separar pessoas por grupos de idade  XML
Índice dos Fóruns » Persistência: Hibernate, JPA, JDBC e outros
Autor Mensagem
fabiobh
JavaEvangelist

Membro desde: 30/12/2010 13:56:57
Mensagens: 386
Offline

a soluçao do ADEMILTON teria sido ideal se eu tivesse conseguido fazer funcionar,
eu não soube passar ela corretamente
o que eu posso estar escrevendo errado nesta sentença abaixo


no mysql workbench acusa erro na linha 2 no 'when'
evefuji
GUJ Ranger

Membro desde: 14/12/2007 22:37:17
Mensagens: 756
Offline

Faz tempo que não mexo com mysql (agora estou mais com oracle e postgres), mas vou fazer umas observações:

1. No Oracle, quando você faz diferença de datas, ele retorna o número de dias, no mysql, como data é tratada no formato Unix, não é possível fazer essa diferença. (se me lembro bem)
2. Para cálculo de idade no Oracle, eu costumava usar a diferença de datas em meses. Se tiver uma função no MySQL que faça a diferença de datas e retorne em meses ou ano, seria melhor (e teria o melhor desempenho)
3. No mysql, se me lembro bem, é Floor. A ideia da lógica é "truncar" o número usando o valor de intervalos, segue um exemplo:



É mais rápido usar cálculos aritméticos que "case when". No caso, coloquei só o valor inicial no Case When porque agrupa todos os valores menores que 20.

Edit: Acusa erro no segundo WHEN porque não colocou o valor que retorna no "THEN" anterior.

This message was edited 1 time. Last update was at 21/12/2011 12:57:33

fabiobh
JavaEvangelist

Membro desde: 30/12/2010 13:56:57
Mensagens: 386
Offline

evefuji wrote:Acusa erro no segundo WHEN porque não colocou o valor que retorna no "THEN" anterior.

Como vc falou estava esquecendo o retorno, mas agora q coloquei funcionou.

evefuji wrote: No mysql, se me lembro bem, é Floor

Sim, o trunc não funciona no mysql, o floor resolve o problema.

Eu entendi sua logica, vou ver se consigo fazer o Mysql devolver o valor da data em anos para poder gerar essa sentença, caso não consiga a solução do case when funciona e eu vou tentar me virar com ela.

Obrigado a todos por ajudarem, a galera do GUJ detona mesmo, vlw e t+
evefuji
GUJ Ranger

Membro desde: 14/12/2007 22:37:17
Mensagens: 756
Offline

só uma coisa que me toquei agora, na lógica:

((curdate() - pes_data_nascimento) / 365.25)

Se o cara tiver mais de 100 anos vai dar diferença de 1 dia. (a cada 100 anos não tem 1 dos anos bissextos, e a cada 1000 anos "volta" esse ano bissexto que não deveria ter)
Lindberg
JavaEvangelist
[Avatar]

Membro desde: 02/05/2006 19:23:53
Mensagens: 363
Offline

eu faria assim no mysql ...

1 - criaria uma tabela temporaria ...
2 - nesta tabela tem tudo que preciso ...

da uma olhada no exemplo que fiz, ver se ajuda !!!!
---------------------------------------



existe uma ganbiarra ... mas funciona !
t+

This message was edited 1 time. Last update was at 22/12/2011 08:56:48


Aqui... A turma é D+++.
[WWW] [MSN]
pmlm
GUJ Master

Membro desde: 20/04/2009 12:20:07
Mensagens: 1201
Localização: Portugal
Offline

E porque não criar uma tabela com os intervalos de idade? Com valor mínimo e máximo de cada intervalo e sua descrição


fabim
GUJ Master
[Avatar]

Membro desde: 14/12/2006 19:30:03
Mensagens: 1268
Localização: Vitoria - Espirito Santo
Offline

Excelente solucao. Parametrizou os intervalos e o dia em que eles alterara, basta mudar a parametrizacao sem alterar o codigo. Parabens.

ειπεν αυτη ο ιησους εγω ειμι η αναστασις και η ζωη ο πιστευων εις εμε καν αποθανη ζησεται

Sun Certified Web Component Developer
Sun Certified Java Programmer
Sun Certified Java Associate
Sun Certified Business Component Developer - Em Andamento
Bacharelando em Sistemas de Informacao


[MSN]
 
Índice dos Fóruns » Persistência: Hibernate, JPA, JDBC e outros
Ir para:   
Powered by JForum 2.1.8 © JForum Team