Ir para conteúdo

Arquivado

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

gremio10

Colocar dois registros em uma unica linha

Recommended Posts

Boa tarde,

 

Eu tenho uma tabela que armazena dois registros por dia de cada usuário. Ele salva o id do usuário e a data com hora.

 

Preciso fazer uma consulta que me retorne os dois horários do dia em uma unica linha, referente aquele usuário.

 

Ex.:

users_id            created_at
   1            2015-02-24 17:20:54
   1            2015-02-24 18:00:00
   2            2015-02-24 09:00:00
   2            2015-02-24 18:24:09

Eu tentei fazendo assim:

SELECT DISTINCT s.users_id,
(SELECT created_at FROM schedules WHERE schedules_type_id = 1 AND users_id = s.users_id) AS entrada,
(SELECT created_at FROM schedules WHERE schedules_type_id = 2 AND users_id = s.users_id) AS saida
FROM schedules s

Mas não tive resultado.

 

 

Essa é a estrutura da minha tabela:

CREATE TABLE `schedules` (
  `id` int(11) NOT NULL AUTO_INCREMENT,
  `users_id` int(11) DEFAULT NULL,
  `schedules_type_id` int(11) DEFAULT NULL,
  `created_at` datetime NOT NULL,
  `updated_at` datetime NOT NULL,
  PRIMARY KEY (`id`),
  KEY `IDX_313BDC8E67B3B43D` (`users_id`),
  KEY `IDX_313BDC8E692AF56F` (`schedules_type_id`),
  CONSTRAINT `FK_313BDC8E692AF56F` FOREIGN KEY (`schedules_type_id`) REFERENCES `schedules_type` (`id`),
  CONSTRAINT `FK_313BDC8E67B3B43D` FOREIGN KEY (`users_id`) REFERENCES `users` (`id`)
) ENGINE=InnoDB AUTO_INCREMENT=6 DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci

Obrigado pela ajuda.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Solucões possíveis que vejo :

 

 

1 montar dois selects como tabelas virtuais , separando pelo type_id , fazer um join destas duas tabelas pelo users_id

 

2 um select apenas e usar combinação de CASE com MAX

Compartilhar este post


Link para o post
Compartilhar em outros sites

Obrigado Motta,

 

eu consegui fazer usando a segunda opção que tu falou.

SELECT id, users_id,
  MAX(CASE WHEN schedules_type_id = 1 THEN created_at END) AS 'Entrada',
  MAX(CASE WHEN schedules_type_id = 2 THEN created_at END) AS 'Saída'
FROM schedules
GROUP BY users_id, DATE_FORMAT( created_at, '%Y-%m-%d' );

Obrigado!

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.