Ir para conteúdo

POWERED BY:

Arquivado

Este tópico foi arquivado e está fechado para novas respostas.

Guga01

select distinct

Recommended Posts

Olá pessoal!

 

Estou desenvolvendo um sistema em php com mysql e tenho a seguinte tabela de folha de ponto:

 

CREATE TABLE `folhas_ponto` (
`idFolhaPonto` int(9) unsigned zerofill NOT NULL auto_increment,
`codigoSecreto` varchar(32) collate latin1_general_ci default NULL,
`data` date NULL,
`he` time NULL, ( hora de entrada )
`ha` time NULL, ( hora de almoço )
`hr` time NULL, ( hora de retorno do almoço )
`hs` time NULL, ( hora de saída )
`local` varchar(60) collate latin1_general_ci default NULL,
`descricao` varchar(100) collate latin1_general_ci default NULL,
`legenda` tinyint(1) NOT NULL default 0,
`idFuncionario` int(9) unsigned zerofill NOT NULL,
`dataCadastro` datetime NULL,
`dataAtualizacao` datetime NULL,
PRIMARY KEY  (`idFolhaPonto`),
FOREIGN KEY (`idFuncionario`)
REFERENCES funcionarios(`idFuncionario`)
ON DELETE RESTRICT
ON UPDATE CASCADE) ENGINE=InnoDB  DEFAULT CHARSET=latin1 COLLATE=latin1_general_ci;

 

Os dados estão sendo gravados corretamente e cada linha da tabela significa um dia de trabalho do funcionário. O que eu gostaria era trazer em uma listagem os meses e anos distintos para depois, selecionando uma linha de determinado mês, trazer todos os dias trabalhados daquele mês.

 

Fiz um select distinct month(data), year(data). Só que preciso da coluna codigoSecreto para saber qual linha da tabela estou selecionando. Daí, como cada código é diferente, os meses e anos se repetem por causa da coluna codigoSecreto. Gostaria de saber se existe uma solução para isso. Obrigado.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Bom vamos la, não sei se compreendi o seu problema de maneira correta. Mas pelo o que eu entendi, você quer trazer um série de tuplas com o total de dias trabalhados e agrupados por um determinado funcionário, correto ?

- Eu nunca mechi com MySQL, mas a sintaxe SQL não deve fugir muito disso, é só adaptar. No oracle ficaria +- dessa maneira:

 

Ao invéz da utilizar o campo `codigoSecreto` como parametro de unicidade, eu utilizaria o campo de `idFolhaPonto` cujo o mesmo é Primary Key com tipo serial (auto_increment) e valores únicos.

 

SELECT extract (month from(data)), SUM(extract (day from(data)))
FROM folhas_ponto
WHERE extract (month from (data)) = ?
GROUP BY 1;

--No caso filtrei e agrupei pelo mês, mas dai é só fazer o join com a tabela funcionario e agrupar pelo mesmo.

 

 

-- Ou, queira agrupar pelo 'codigoSecreto' como disse é só filtrar por ele mesmo:

SELECT extract (month from(data)), extract (day from(data))
FROM folhas_ponto
WHERE codigoSecreto = ?
GROUP BY 1;

Compartilhar este post


Link para o post
Compartilhar em outros sites

Não seria assim?

SELECT extract (month from(data)), SUM(extract (day from(data)))
FROM folhas_ponto
WHERE extract (month from (data)) = ?
GROUP BY codigoSecreto;

 

Compartilhar este post


Link para o post
Compartilhar em outros sites

×

Informação importante

Ao usar o fórum, você concorda com nossos Termos e condições.