-
Total de itens
463 -
Registro em
-
Última visita
Tudo que Kakao postou
-
O resultado deste select é o que você postou ou você editou o resultado?: Porque se os dados estiverem dessa forma na base vai ficar difícil.
-
Boa idéia a do ocorr_id. Faça assim: SELECT `código_cliente` , `código_ocorrência` , data_entrada, zona FROM `Ocorrências` o WHERE `código_ocorrência` = 'E401' AND ocorr_id = ( SELECT max(ocorr_id) FROM `Ocorrências` WHERE `código_cliente` = o.`código_cliente` ) ; Mas as datas mais recentes do cliente 1034 são aquelas que eu listei, basta repetir a consulta. A não ser que a aplicação esteja usando uma base diferente da que você me passou.
-
O problema é que as datas estão armazenadas com precisão de minuto. Quando mais de uma ocorrência acontece dentro do mesmo minuto não há como saber qual foi a última. Veja o caso do cliente 1034: mysql> select código_ocorrência, data_entrada from Ocorrências where código_cliente = '1034' order by data_entrada desc limit 10; +---------------------+---------------------+ | código_ocorrência | data_entrada | +---------------------+---------------------+ | E321 | 2010-12-23 19:33:00 | | E401 | 2010-12-23 19:33:00 | | R401 | 2010-12-23 19:33:00 | | E401 | 2010-12-23 19:33:00 | | R401 | 2010-12-23 19:33:00 | | E401 | 2010-12-23 19:33:00 | | R130 | 2010-12-23 19:33:00 | | E130 | 2010-12-23 19:32:00 | | R401 | 2010-12-23 19:32:00 | | E401 | 2010-12-23 19:32:00 | +---------------------+---------------------+ 10 rows in set (1.26 sec) Apesar de a ocorrência E321 aparecer em primeiro ordenada pela data descendente ela não é necessariamente a última já que existem várias no horário de 19:33:00. A consulta com o distinct é o melhor que dá para fazer. Repita a consulta acima para cada um dos casos que você postou e verá que onde existe o problema é porque as datas estão repetidas. A solução é fazer a entrada da data na base com o máximo de precisão possível, no mínimo com precisão de segundos. Como você ainda não criou os índices a consulta está muito lenta.
-
Ordenação com subquery com 4 tabelas
pergunta respondeu ao Total := QryHora.FieldByN de Kakao em MySQL
select *, 0 as preferencia from produto p inner join categoria cat on p.categoria_id = cat.id inner join cliente_categoria cli_cat on cli_cat.cat_id = cat.id inner join cliente cli on cli.id = cli_cat.cliente_id where cli.id = @cliente_id union select *, 1 as preferencia from produto where condição = minha_condição order by preferencia limit 10 -
Aleatória? Você quer dizer que as que aparecem acima não são as últimas ocorrências? Se o problema for só a repetição é porque existem linhas repetidas na tabela o que eu achei que não ocorreria. Para solucionar a repetição use o distinct: SELECT DISTINCT `código_cliente` , `código_ocorrência` , data_entrada, zona FROM `Ocorrências` o WHERE `código_ocorrência` = 'E401' AND data_entrada = ( SELECT max( data_entrada ) FROM `Ocorrências` WHERE `código_cliente` = o.`código_cliente` ) Eu entendi que só deve ser retornado aqueles cujo último código de ocorrência seja E401. Se você conseguir fazer um dump da base e disponibilizar em algum lugar, ou se não for muito grande me mandar por email eu analiso.
-
Ordenação com subquery com 4 tabelas
pergunta respondeu ao Total := QryHora.FieldByN de Kakao em MySQL
select * from produto p inner join categoria cat on p.categoria_id = cat.id inner join cliente_categoria cli_cat on cli_cat.cat_id = cat.id inner join cliente cli on cli.id = cli_cat.cliente_id where cli.id = @cliente_id order by p.nome limit 10 -
Me parece que o COUNT(id_aluno) nunca vai retornar NULL então o COALESCE entrou de gaiato...
-
Eu ia sugerir a criação de índice(s). Mas pode-se tentar também: select a.cod_cliente, a.cod_ocorrencia, a.data_entrada, a.zona from ocorrencias a inner join ( select cod_cliente, cod_ocorrencia, max(data_entrada) as data_entrada from ocorrencias ) as b on a.cod_cliente = b.cod_cliente and a.cod_ocorrencia = b.cod_ocorrencia and a.data_entrada = b.data_entrada where a.cod_ocorrencia = 'E401' Testando as duas consultas com e sem índices.
-
Para usar nomes de campos com acentos use crases: select `código_ocorrência` from `Ocorrências` etc...
-
Eu testei aqui e não deu erro: create table ocorrencias ( ocorr_id int(11) primary key auto_increment, codigo_cliente int(16), codigo_ocorrencia varchar(50), data_entrada datetime, zona varchar(8) ) ; insert into ocorrencias (codigo_cliente, codigo_ocorrencia, data_entrada, zona) values (1116, 'E401', '2011-03-28 16:44', '004'), (1338, 'R401', '2011-03-28 14:32', '001') ; select codigo_cliente, codigo_ocorrencia, data_entrada, zona from ocorrencias o where codigo_ocorrencia = 'E401' and data_entrada = ( select max(data_entrada) from ocorrencias where codigo_cliente = o.codigo_cliente ) ; +----------------+-------------------+---------------------+------+ | codigo_cliente | codigo_ocorrencia | data_entrada | zona | +----------------+-------------------+---------------------+------+ | 1116 | E401 | 2011-03-28 16:44:00 | 004 | +----------------+-------------------+---------------------+------+ 1 row in set (0.02 sec)
-
select codigo_cliente, codigo_ocorrencia, data_entrada, zona from ocorrencias o where codigo_ocorrencia = 'E401' and data_entrada = ( select max(data_entrada) from ocorrencias where codigo_cliente = o.codigo_cliente )
-
select codigo_cliente, codigo_ocorrencia, max(data_entrada) as data_entrada, zona from ocorrencias o0 group by codigo_cliente where 'E401' = ( select codigo_ocorrencia from ocorrencias where data_entrada = o0.data_entrada and codigo_cliente = o0.codigo_cliente )
-
select codigo_cliente, codigo_ocorrencia, max(data_entrada), zona from ocorrencias group by codigo_cliente where codigo_ocorrencia = 'E401'
-
Criar tabela a partir do pg_attribute de outra tabela
pergunta respondeu ao Marcel Costa de Kakao em PostgreSQL
create table log_produtos as query Note a palavra query no final. Consulte a sintaxe no manual: http://www.postgresql.org/docs/8.4/interac...atetableas.html -
set @prioridade := 0; select @prioridade := @prioridade + 1 as prioridade, outra_coluna from minha_tabela where usuario = 'fulano' and condicao = 'xyz' order by coluna1 limit 20
-
Se for Python 3.x então o print é uma função e os argumentos devem vir entre parêntesis: print ("Bom Dia", nome)
-
Para receber ajuda com trabalho escolar você deve demonstrar o que já tentou fazer.
-
(Resolvido) Criar SQL contabilizar média entre horas
pergunta respondeu ao Cesar Lopes de Kakao em MySQL
select date_format(data, '%Y-%m-%d %H') as hora, avg(valor) from tabela group by hora order by hora -
O id é gerado pelo banco se o tipo da coluna for serial ou bigserial como você colocou no título desta thread. Duas maneiras de retornar o id. A que eu acho mais simples é usar a cláusula RETURNING do INSERT: insert into tabela (x, y) values ('abc', 2) returning id A outra maneira: select curval(tabela_id_seq) as id Nesta última forma o comando deve ser dado dentro da mesma sessão em que foi feito o último insert.
-
Para selecionar as três últimas: select id, noticia from noticia order by id desc limit 3
-
na verdade, o nome da tag é CODE. :blush: Ainda bem que tem alguém que sabe o nome das tags para fazer estas importantíssimas, urgentíssimas e muito relevantes correções.
-
O campo tem que permitir nulo e o default deve ser nulo. alter table minha_tabela modify column minha_coluna tinyint null default null; Na hora de salvar, se o valor for uma string vazia então salva o valor nulo ou não salva o valor já que o default é nulo.
-
Andre, use a tag post para formatar o código, do contrário fica impossível de ler e provavelmente ninguém vai responder.
-
Muito melhor fazer a formatação na aplicação. Faz só o sum no sql: select sum(cast(replace(replace(valor_finan, '.', ''), ',', '.') as decimal(10,2))) Dá para fazer no mysql mas o código fica ilegível e você não ganha nada com isso. Se o tipo da coluna é texto então ferrou pra sempre. Melhor arrumar outro emprego.
-
Coloca (Revolvido) no começo do título