PEGAR PRIMEIRO REGISTRO POR DIA

SQL

MySQL

Banco de Dados

25/04/2017

Olá pessoal,

Preciso de um help quanto a elaboração de uma query.

Tenho uma tabela onde é registrado o HORIMETRO de um carro e a DATA/HORA de sua inserção no banco.

Preciso DE uma query que me retornar o primeiro HORIMETRO por dia.

Segue exemplo da tabela:

HOR DATA_HORIMETRO
253438 2016-10-13 18:52:28
253438 2016-10-13 18:52:28
253438 2016-10-13 18:52:32
253438 2016-10-14 14:46:24
253438 2016-10-14 14:48:30
253438 2016-10-14 14:52:43
253438 2016-10-14 15:39:08
253438 2016-10-14 15:44:09
253438 2016-10-17 08:17:54
253438 2016-10-17 08:50:11
253438 2016-10-17 08:57:18
253438 2016-10-17 09:02:19
253438 2016-10-17 09:22:21
253438 2016-10-17 14:20:51
253438 2016-10-18 08:25:09
253438 2016-10-18 08:26:19
253438 2016-10-18 08:58:39
Ricardson Couto

Ricardson Couto

Curtidas 0

Respostas

Calebe Menezes

Calebe Menezes

25/04/2017

Olá Ricardson tudo bem?

Você tem mais alguma coluna, tipo a coluna de id?

Você poderia limitar a query para trazer o primeiro resutlado ordenando pela data mais antiga do dia.

Você iria precisar de um WHERE e um ORDER BY para isso.

Tá meio misturado os dados e não consegui identificar o que é o que aí.

Passa as colunas da tabela para eu ver
GOSTEI 0
Rafael Oliveira

Rafael Oliveira

25/04/2017

Boa noite Ricardo Couto,

para realizar essa consulta, na minha opinião o necessário é fazer um tratamento nessa coluna, para que fique somente a parte do campo data hora.

Fiz uns procedimentos para simular sua dúvida e desenvolvi o tratamento e as consultas para conseguir trazer a primeira do dia corrente e de qualquer dia que desejar.

Espero ter te ajudado e desejo boa sorte em sua jornada!

/* Criei uma tabela chamada horimetro com a coluna DATA_HORIMETRO (NVARCHAR) E HORA (DATETIME)*/
/* INSERI ALGUNS VALORES PARA TESTE */
USE [TESTE]
GO


INSERT INTO [dbo].[HORIMETRO]
           ([DATA_HORIMETRO])
     VALUES
           ('253438	2016-10-13 18:52:28')
GO
INSERT INTO [dbo].[HORIMETRO]
           ([DATA_HORIMETRO])
     VALUES
           ('253438	2016-10-13 18:52:28')
GO
INSERT INTO [dbo].[HORIMETRO]
           ([DATA_HORIMETRO])
     VALUES
           ('253438	2016-10-13 18:52:32')
GO
INSERT INTO [dbo].[HORIMETRO]
           ([DATA_HORIMETRO])
     VALUES
           ('253438	2016-10-14 14:46:24')
GO
INSERT INTO [dbo].[HORIMETRO]
           ([DATA_HORIMETRO])
     VALUES
           ('253438	2016-10-14 14:48:30')
GO
INSERT INTO [dbo].[HORIMETRO]
           ([DATA_HORIMETRO])
     VALUES
           ('253438	2016-10-14 14:52:43')
GO
INSERT INTO [dbo].[HORIMETRO]
           ([DATA_HORIMETRO])
     VALUES
           ('253438	2016-10-14 15:44:09')
GO
INSERT INTO [dbo].[HORIMETRO]
           ([DATA_HORIMETRO])
     VALUES
           ('253438	2016-10-17 08:17:54')
GO
INSERT INTO [dbo].[HORIMETRO]
           ([DATA_HORIMETRO])
     VALUES
           ('253438	2016-10-17 08:50:11')
GO
INSERT INTO [dbo].[HORIMETRO]
           ([DATA_HORIMETRO])
     VALUES
           ('253438	2016-10-17 08:57:18')
GO
INSERT INTO [dbo].[HORIMETRO]
           ([DATA_HORIMETRO])
     VALUES
           ('253438	2016-10-17 09:02:19')
GO
INSERT INTO [dbo].[HORIMETRO]
           ([DATA_HORIMETRO])
     VALUES
           ('253438	2016-10-17 09:22:21')
GO
INSERT INTO [dbo].[HORIMETRO]
           ([DATA_HORIMETRO])
     VALUES
           ('253438	2016-10-17 14:20:51')
GO
INSERT INTO [dbo].[HORIMETRO]
           ([DATA_HORIMETRO])
     VALUES
           ('253438	2016-10-18 08:25:09')
GO


SELECT *
FROM HORIMETRO

SELECT RTRIM(LTRIM(SUBSTRING(DATA_HORIMETRO,8,20)))
FROM HORIMETRO

/* Convertendo para data e pegando depois do código, para ficar somente com a data*/
BEGIN TRAN
UPDATE HORIMETRO
SET HORA = CAST(RTRIM(LTRIM(SUBSTRING(DATA_HORIMETRO,8,20))) AS datetime)
--COMMIT
ROLLBACK

/*Para pegar a primeira do dia corrente*/
SELECT TOP(1) *
FROM HORIMETRO
WHERE 
		YEAR(HORA) = YEAR(GETDATE()) 
	AND MONTH(HORA) = MONTH(GETDATE())
	AND DAY(HORA) = DAY(GETDATE())
ORDER BY HORA

/*Para pegar a primeira de qualquer dia que desejar*/
SELECT TOP(1)  *
FROM HORIMETRO
WHERE 
		YEAR(HORA) = 2016 
	AND MONTH(HORA) = 10
	AND DAY(HORA) = 13
ORDER BY HORA DESC
GOSTEI 0
Rafael Oliveira

Rafael Oliveira

25/04/2017

Correção da ultima consulta:

/*Para pegar a primeira de qualquer dia que desejar*/
SELECT TOP(1)  *
FROM HORIMETRO
WHERE 
		YEAR(HORA) = 2016 
	AND MONTH(HORA) = 10
	AND DAY(HORA) = 13
ORDER BY HORA ASC
GOSTEI 0
POSTAR