Página 1 de 2
Ajuda com comandos SQL
Enviado: 01 Out 2018 10:42
por Poka
Olá a todos.
o comando abaixo dá erro unknow p
peguei aqui mesmo esse comando
Código: Selecionar todos
str:="select protocolo, count(protocolo) as p from notad group by protocolo having p > 1;"
este dá certo, não fica meio redundante?
dois count?
Código: Selecionar todos
str:="select protocolo ,count(protocolo) from notad group by protocolo having count(protocolo) > 1 ;"
Obrigado
Poka
Ajuda com comandos SQL
Enviado: 01 Out 2018 11:29
por alxsts
Olá!
Esta consulta seve para selecionar linhas de uma tabela que tenham mais de uma ocorrência do valor de alguma coluna.
Qual SGBDR você está utilizando? Pode ser que nele isto não seja aceito. Pode usar a segunda opção. Não é redundante não...
Ajuda com comandos SQL
Enviado: 01 Out 2018 15:24
por Poka
Obrigado Alexandre por responder
harbour + Firebird 2.5 com ODBC
Poka
Ajuda com comandos SQL
Enviado: 01 Out 2018 16:42
por Poka
Alexandre
desculpa aproveitar da sua boa vontade
Antes de perguntar sempre verifico exemplos de livros , apostilas, mas os exemplos são só com um campo ( eles colocam só o mais fácil).
Retorna os repetidos
Código: Selecionar todos
str:="select protocolo ,count(protocolo) from notad group by protocolo having count(protocolo) > 1 ;"
retorna que não tem repetido
Código: Selecionar todos
str:="select docum,protocolo, count(protocolo) from notad group by docum,protocolo having count(protocolo) > 1 ;"
Poka
Ajuda com comandos SQL
Enviado: 01 Out 2018 18:28
por alxsts
Olá!
Se podem exixtir várias linhas com docum e protocolo repetidos, coloque as duas condições:
Código: Selecionar todos
str := "SELECT docum, protocolo, Count(docum), Count(protocolo) " + ;
"FROM notad " + ;
"GROUP BY docum, protocolo " + ;
"HAVING ( Count(docum) > 1 AND Count(protocolo) ) > 1 ;"
Ajuda com comandos SQL
Enviado: 01 Out 2018 19:52
por JoséQuintas
Não sei se no firebird é diferente, mas....
SELECT protocolo, COUNT(*) AS qtd FROM notad GROUP BY protocolo HAVING qtd > 1
Ajuda com comandos SQL
Enviado: 04 Out 2018 16:27
por Poka
Boa tarde
Alexandre
assim não retorna nada, mas ta correto
exemplos sao documentos diferentes com protocolos iguais, não é pra ter mesmo.
Código: Selecionar todos
str := "SELECT docum, protocolo, Count(docum), Count(protocolo) " + ;
"FROM notad " + ;
"GROUP BY docum, protocolo " + ;
"HAVING ( Count(docum) > 1 AND Count(protocolo) ) > 1 ;"
assim retorna correto
Código: Selecionar todos
str := "SELECT protocolo, Count(protocolo) " + ;
"FROM notad " + ;
"GROUP BY protocolo " + ;
"HAVING Count(protocolo) > 1 ;"
mas quero aproveitar e trazer outros campos, docum por exemplo
nao retorna nada , mas era pra retornar
Código: Selecionar todos
str := "SELECT docum,protocolo, Count(protocolo) " + ;
"FROM notad " + ;
"GROUP BY docum,protocolo " + ;
"HAVING Count(protocolo) > 1 ;"
já resolvi o problema, mas queria saber fazer isto, sei que na hora de extrair os relatorios posso precisar uma consulta deste tipo.
José Quintas
dá erro que a coluna QTD não existe.
Código: Selecionar todos
str:="SELECT protocolo, COUNT(*) AS qtd FROM notad GROUP BY protocolo HAVING qtd > 1;"
Obrigado
Poka
Ajuda com comandos SQL
Enviado: 04 Out 2018 17:04
por alxsts
Olá!
Vou instalar o Firebird para testar. Tem como anexar o script de criação da tabela e alguns inserts com dados de teste? Assim fica mais fácil...
Ajuda com comandos SQL
Enviado: 07 Jan 2019 10:40
por Poka
Olá a todos
as duvidas acima foram resolvidos. agradeço a ajuda de todos.
outra dúvida
exemplo de ficha de controle abaixo
Código: Selecionar todos
data historico valor dc saldo
03/04/2003 abertura 0 c 0
30/04/2003 vales mes 24,60 c 24,60
30/04/2003 vales mes 24,60 c 49,20
30/04/2003 vales mes 24,60 c 73,80
30/04/2003 vales mes 24,60 c 98,40
07/05/2003 pagto 24,60 d 73,80
se quero o saldo de 07/05/2003 ok
saldo de 30/04/2003 ok
saldo de 05/05/2003 teria que trazer o ultimo saldo de 30/04/2003 98,40 está trazendo o primeiro de 30/04/2003 24,60.
quando tem + de um lançamento na data anteror, quando não existe a data pedida retorna errado.
comando
Código: Selecionar todos
select first 1 max(data) ,saldo from movfor where codfor = '00856' and data < '05/05/2003' group by data,saldo order by data desc;
alguma ideia?
agradeço qq ajuda
Poka
Ajuda com comandos SQL
Enviado: 07 Jan 2019 13:10
por Poka
Cheguei numa solução aqui. Resolvido.
Poka
Ajuda com comandos SQL
Enviado: 07 Jan 2019 20:49
por JoséQuintas
Tá se referindo a apenas um lançamento?
Uma coisa interessante em MySQL é ter sempre uma identificação única.
Teoricamente, o lançamento de ID mais recente seria o último.
Código: Selecionar todos
SELECT FIRST 1 DATA, SALDO FROM MOVFOR WHERE CODFOR='00856' AND DATA < '2003/05/05' ORDER BY DATA DESC, ID DESC
Ajuda com comandos SQL
Enviado: 21 Jan 2019 21:12
por Poka
Olá
Quintas escreveu
Uma coisa interessante em MySQL é ter sempre uma identificação única.
em itens de nota fiscal coloco nr do item , seria +- isso que vc ta dizendo Quintas?
A hora que chegar em cálculo de fichas de estoque, volto ao assunto
Agora estou precisando de outra ajuda meio complicado parece, mas acho que uma linha select resolve, creio que tenho que usar count e having mas não consegui.
Já tenho essa rotina funcionando em dbf normal, há muitos anos.
a lista de produto desse cliente não passa de 7 itens
Esse cliente coleta produtos de muitos fornecedores
de alguns fornecedores eles coletam somente 1 produto, outros 2 , outros 4 , tem muitos fornecedores, e cada fornecedor varios lancamentos no mes
no arquivo exemplo LANCA_2018 tenho
codprod
data
preciso saber no mes 07/2018 qual a maior quantidade de codigo coletados de um mesmo fornecedor, não é a quantidade de produtos.
não importa qual fornecedor. preciso saber para definir a largura do relatorios
Em um relatorio de 800 fornecedores se 799 pegou um tipo de codigo e 1 fornecedor pegou 5 tipos de codigo, vou considerar o maior.
Não sei se consegui explicar direito, agradeço qq ajuda
Grato
Poka
Ajuda com comandos SQL
Enviado: 21 Jan 2019 21:18
por Poka
pra poder extrair essa informação faltou um campo do arquivo
codigo do fornecedor
codfor
Poka
Ajuda com comandos SQL
Enviado: 21 Jan 2019 22:31
por JoséQuintas
Poka escreveu:em itens de nota fiscal coloco nr do item , seria +- isso que vc ta dizendo Quintas?
Seria um número sequencial, quase como se fosse o RecNo().
No MySQL isso evita muita lentidão, é uma forma única de identificar um registro.
Um colega nosso aqui do fórum estava com uma base de 100GB.
Apagar um registro era uma eternidade, chegava a estourar o limite de tempo, e com chave única passou a ser mais instantâneo.
E a chave nem era importante pra pesquisa....
Foi aí que vi que faz muuuito mais diferença do que eu pensava.
Ajuda com comandos SQL
Enviado: 08 Fev 2019 13:53
por Poka
Olá a todos.
Olhando a instrução abaixo, daria pra saber porque o comando SUM está trazendo duplicado, já vi na tabela, a quantidade ta certa.
Código: Selecionar todos
select c.codmun, c.carrega, c.data , sum(c.pesobal) ,sum(c.totkilos), ca.placa, m.nomemun , mo.nome from Lan_2018 c , carrega ca , motori mo , cadmun m where c.data >= '2018-07-01' and c.data <= '2018-07-31' and c.codmun >= '0062' and c.codmun <= '0062' and c.carrega = ca.codigo and ca.codmoto = mo.codigo and ca.codmun = m.codmun group by c.codmun, c.carrega ,c.data, ca.placa, m.nomemun, mo.nome;
Obrigado
Poka