rderoci
-
Total de itens
11 -
Registro em
-
Última visita
Posts postados por rderoci
-
-
Boa tarde Rderoci,
você pode fazer o agrupamento por Matrícula, pegando o max(DATA). Ai você conseguirá agrupar, pegando um único registro por matricula (sendo ele o mais recente).
Mas tem uma obs.: para realizar o agrupamento, os campos VALOR1 e VALOR2 devem ficar de fora, porque senão não ocorrerá o agrupamento corretamente. Ficaria mais ou menos assim:
select matricula, MAX(data) FROM TABELA GROUP BY matricula
Fulvio,
Exatamente aí é que está: tenho que retornar o VALOR1 e VALOR2... Será que um simples select eu não conseguirei? Terei que fazer alguma procedure?
-
Caros,
Mais uma vez cá estou solicitando ajuda de vocês!
Tenho o seguinte "problema":
Tenho que selecionar a primeira linha de cada agrupamento.
Exemplo:
MATRICULA|VALOR1|VALOR2|DATA
111............|0..........|1.........|01/01/2010
111............|1..........|2.........|02/01/2010
111............|0..........|1.........|03/01/2010
333............|4..........|5.........|03/01/2010
333............|5..........|2.........|07/01/2010
777............|1..........|2.........|04/02/2010
777............|0..........|1.........|09/01/2010
888............|1..........|2.........|05/01/2010
No caso, teria que fazer um select que me retornasse somente 1 registro de cada agrupamento (por matricula), e esse 1 registro seria o que tiver a DATA mais atual, ou seja, teria que me retornar:
MATRICULA|VALOR1|VALOR2|DATA
111............|0..........|1.........|03/01/2010
333............|5..........|2.........|07/01/2010
777............|1..........|2.........|04/02/2010
888............|1..........|2.........|05/01/2010
Valeu!!! :wacko:
-
Então inverte os dias, meses e anos (igual o post que postei lá em cima). O formato da data no Banco é fundamental!!
No meu Banco está YYYY-MM-DD.
Olhe o formato do seu e inverta o script para que as datas fiquem corretas.
Minha configuração:
Set Option Value
language us_english
dateformat mdy
datefirst 7
Já tentei com MDY e nada... Já tentei de outras ordens e nada, também.
-
O script não funcionou?
Testei aqui na minha máquina e funcionou certinho.
Deve ser as configurações de data no meu gerenciador...
Fazendo esta consuta:
select cast((convert(varchar,2010) + '/' + convert(varchar,2) + '/01') as datetime)
me retorna: 01/2/2010
E no seu? 2010/2/01 ?
-
Rs... postei um exemplo completo pra vc. Criei uma tabela temporária nos moldes de sua base.
Dê uma olhada se é isto mesmo. Segue script comentado:
-- Criação de temporária create table #ITEM_CARNE (Mes SMALLINT, Ano SMALLINT) -- Inserção de dados insert into #ITEM_CARNE values (08, 2009) insert into #ITEM_CARNE values (09, 2009) insert into #ITEM_CARNE values (10, 2009) insert into #ITEM_CARNE values (1, 2010) insert into #ITEM_CARNE values (3, 2010) insert into #ITEM_CARNE values (5, 2010) insert into #ITEM_CARNE values (6, 2010) -- Conferência select * from #ITEM_CARNE -- Seleciona daqui até o final e roda Declare @AnoInicio SMALLINT Declare @MesInicio SMALLINT Declare @AnoFim SMALLINT Declare @MesFim SMALLINT select * from #ITEM_CARNE -- Pra alternar a data de pesquisa, altera os valores das variáveis Set @AnoInicio = 2009 Set @MesInicio = 10 Set @AnoFim = 2010 Set @MesFim = 05 select cast((convert(varchar,ANO) + '/' + convert(varchar,MES) + '/01') as datetime), * from #ITEM_CARNE where cast((convert(varchar,ANO) + '/' + convert(varchar,MES) + '/01') as datetime) BETWEEN cast((cast(@AnoInicio as varchar) + '/'+ cast(@MesInicio as varchar) + '/01') as datetime) and cast((cast(@AnoFim as varchar) + '/'+ cast(@MesFim as varchar) + '/01') as datetime)
Aí dá: A conversão de um tipo de dados char em um tipo de dados datetime resultou em um valor datetime fora do intervalo.
No momento do between
rs... Vou tentando aqui...
-
Dê uma olhada então nos dados que está tentando converter. Faz um select pra ver se existe algum mês fora do intervalo de 1 a 12. Mesmo esquema com os anos (creio que este ai não será o problema). Fiz um exemplo gerando o erro que postou:
select cast ('2010-15-15' as datetime)
Caros amiguinhos... Ainda não consegui!
Alguém tem uma luz?
Resumindo:
Tenho na tabela X, dois campos: 'ANO'(SMALLINT) e 'MES'(SMALLINT)
devo buscar datas entre eles, onde no sistema eu colocaria:
Ano início: 2009
Mes início: 10
Ano fim: 2010
Mes fim: 05
Como tenho o mes e o ano separado cada um em um campo, tá difícil mostrar o between dos dois sem usar o 'IN'.
-
Dé uma olhada no formato da data. Este erro é porque está tentando converter pra uma data que não existe. Se você trocar o mês pelo dia, dá erro de conversão, entendeu?
Ex.: você está falando que é o dia 20, mas na conversão o sql está entendendo que o mês é 20. Como não existe, aparece o erro de conversão.
Se o formato for em inglês, faça AAAAMMDD. Provavelmente deve ser este... apenas troque a ordem do dia pelo mês.
Já tentei com todas as formas possíveis... mas tudo resultou nesse mesmo erro...
executando os options: dbcc useroptions
Tenho:
Set Option Value
language us_english
dateformat mdy
(já usei mdy, etc...).
-
Fiz aqui:Boa tarde Amigo,Entedi o problema. A única dúvida é a entrada dos dados de pesquisa...
Quando você diz q a data de pesquisa está entre 12/2009 e 01/2010, a data está neste formato?
O problema de utilizar comparações de datas com campos numéricos, é á diferença no modo de comparação:
- Para você saber se uma data é menor que a outra, é necessário ter o ano.
- Para saber se um número é menor que o outro, apenas uma comparação simples basta.
É um pouco "lógico" eu falar isto, mas quando se programa, as coisas não ficam tão lógicas.... rs.
Vi que faz o convert pra concatenar os campos das datas. O que me parece que está faltando é a conversão da data concatenada para o tipo DATA. Ai, você poderá fazer uma comparação entre datas. Desta forma, você está comparando string com string.
Ficaria mais ou menos assim:
select cast((convert(varchar,ano) + '/01/' + convert(varchar,mes)) as datetime) from ALUNO where cast((convert(varchar,ano) + '/01/' + convert(varchar,mes)) as datetime) BETWEEN cast(('2009' + '/01/'+ convert(varchar,mes)) as datetime) and cast(('2010' + '/01/'+ convert(varchar,mes)) as datetime)
CONSIDERAÇÕES: - Perceba que não converti o ano de pesquisa 2009 e nem 2010. Basta colocar aspas simples para identifica pro sql que é caracteres. Se não colocar, a função + tentará somar, e não concatenar. - Atenção ao formato da data. Vi que no seu exemplo colocou AAAADDMM. Verifique se o formato está ok. - Colocou também o acrescimo de 0 no mês. Na conversão, o sql "entede" o formato e já ajusta o campo. Espero que ajude a resolver o problema... Qualquer dúvida, posta ai!!! :.)select cast((convert(varchar,I.ANO) + '/01/' + convert(varchar,I.MES)) as datetime) from ITEM_CARNE I where cast((convert(varchar,I.ANO) + '/01/' + convert(varchar,I.MES)) as datetime) BETWEEN cast(('2009' + '/01/'+ convert(varchar,I.MES)) as datetime) and cast(('2010' + '/01/'+ convert(varchar,I.MES)) as datetime)
e me apareceu o seguinte erro:
1)
The conversion of a char data type to a datetime data type resulted in an out-of-range datetime value.
e 2)
Quando dou um select, por exemplo, entre os meses 1 e 8, ele me retorna, também, os meses 10, 11 e 12, pois está buscando como se fosse um like do mês 1, entendeu?
Vou continuar tentando aqui mas estou aberto a sugestões.... ;p
-
Ou também pode usar o mais "incorreto", seria o periodo <= 'data' AND periodo => 'data'
+- isso!!
Mas use between.
Aproveitando, conheça a função datediff(X, Campo1, Campo2)
**O X pode ser day, month, year. Ela te mostra a diferença entre 2 campos data, seja em anos, meses ou dias(o que você escolher).
Acho que você não entendeu...
Vou dar um exemplo:
tabela:
ALUNO
campos:
'ANO' (SMALLINT), 'MES'(SMALLINT) e 'MATRICULA'
como faço um between para me retornar somente as matriculas entre 12/2009 e 01/2010 (mês/ano)
estou tentando da seguinte forma:
SELECT top 100 CONVERT(VARCHAR(10),CONVERT(VARCHAR(4),i.ano)+'/01'+'/0'+CONVERT(VARCHAR(2),i.mes))
from ALUNO i
WHERE CONVERT(VARCHAR(10),CONVERT(VARCHAR(4),i.ano)+'/01'+'/0'+CONVERT(VARCHAR(2),i.mes)) BETWEEN
CONVERT(VARCHAR(10),CONVERT(VARCHAR(4),2009)+'/01'+'/0'+CONVERT(VARCHAR(2),12))
AND
CONVERT(VARCHAR(10),CONVERT(VARCHAR(4),2010)+'/01'+'/0'+CONVERT(VARCHAR(2),01))
Não dá certo.
-
Olá pessoal!!!
Tenho na minha tabela os seguintes campo: 'ANO' e 'MES'
Como faço, no SQL Server, para buscar um período, por exemplo, entre o ANO 2009 MES 12 E ANO 2010 MES 2?
Obrigado.
MySql Cluster - Velocidade?
em MySQL
Postado
Olá pessoas!
Venho para tirar uma dúvida... O MySql Cluster, ajuda a melhorar o tempo de resposta quando temos bases bem grandes? Digo pois tenho em java um algoritimo do Framework Apache Mahout que demora horas para ser executado por motivo de queries massivas no MySql!
O MySql Cluster faz acesso aos nós do cluster em paralelo (para aumentar a velocidade)?
Ou ele seria mais para quando um banco por algum motivo cair, o outro suprir? Ou seja, não tem nada haver com a velocidade da consulta...
Vocês saberiam algum outro método, pode ser para qualquer SGBD, A NÍVEL DE BANCO DE DADOS que faça minha consulta a esses meus vários gigabytes de dados ficarem bem mais rápidos?!