Usuário com melhor resposta
Manipulação com SQL / problemas com Lógica

Pergunta
-
Boa Tarde!
To com uma buxa aqui no trampo, e espero que vocês me ajudem!
Aqui na empresa existe um WebService que cadastra a localidade de cada técnico, de 5 em 5 minutos...
são cadastrados na TAB_POSITION POS latitude e longitude.
o que eu devo fazer:
tenho que mudar essa consulta para 1 em uma hora, lembrando que são cadastrados dados no BD a cada 5 minutos sempre.
eu preciso simplesmente de uma logica que traga somente o primeiro cadastro de cada hora.
trazer o top 1 do DATEPART(HOUR,POS.DATE) de cada hora do dia.
O que eu tentei fazer, porem meu chefe não aprovou, criei 24 subquerys (gambiarra total) uma pra cada hora, trazendo o top 1 de cada hora;
emfim, também tentei fazer um GROUP BY DATEPART(HOUR,POS.DATE) HAVING DATEPART(MINUTE,POS.DATE) < 2 só que não funcionou, porque o having é uma clausula apenas para o HOUR.também já tentei criar subconsultas com o MIN(DATEPART(MIN,POS.DATE)) porem, queria trazer não o menor minuto que foi cadastrado, e sim o menor minuto da hora 0, 1, 2, 3...
Bom não consigo achar mais nada na net que me ajude, e sei que o que ta faltando é lógica, alguém consegue me ajudar?Aí esta a query que estou trabalhando, e que pode também servir de exemplo, mas tem outro porem:
SELECT
POS.LATITUDE,
POS.LONGITUDE,
USR.USER_NAME + '</BR>' + CONVERT(VARCHAR, POS.DATE, 103) + ' ' + CONVERT(VARCHAR, POS.DATE, 108),
ID_TECHNICAL "ID"
FROM
TB_POSITION POS
INNER JOIN TB_TECHNICAL TECH
ON POS.IMEI = TECH.IMEI
INNER JOIN TB_USER USR
ON TECH.ID_USER = USR.ID_USER
WHERE
DATEPART(MINUTE,POS.DATE) < 4
ORDER BY ID
essa foi uma das tentativas
deu certo, ele traz todos os cadastros feitos em 4 minutos iniciais de cada hora .
mas existe um porem,
se o cara desligar o celular entre as x:58 e ligar x+1:06 não irá aparecer o cadastro dele neste momento, então
eu teria que achar o primeiro cadastro feito na hora mesmo
Respostas
-
Olá Jooji,
Tente usar o row_number,
acho que ficaria mais ou menos assim
WITH CONSULTA_ROWNUMBER AS (SELECT POS.LATITUDE, POS.LONGITUDE, USR.USER_NAME + '</BR>' + CONVERT(VARCHAR, POS.DATE, 103) + ' ' + CONVERT(VARCHAR, POS.DATE, 108), ID_TECHNICAL "ID", ROW_NUMBER() OVER (PARTITION BY TB_USER.ID_USER,DATEPART(HOUR,POS.DATE) ORDER BY DATEPART(MINUTE,POS.DATE)) as ORDEM FROM TB_POSITION POS INNER JOIN TB_TECHNICAL TECH ON POS.IMEI = TECH.IMEI INNER JOIN TB_USER USR ON TECH.ID_USER = USR.ID_USER) SELECT * FROM CONSULTA_ROWNUMBER WHERE ORDEM = 1 ORDER BY ID
Att.
Lukas Baldan- Editado Lukas de Castro Ruocco Baldan terça-feira, 8 de maio de 2012 18:28
- Marcado como Resposta JoojiCorrea quarta-feira, 9 de maio de 2012 16:06
-
Esse primeiro foi o resultado da query que eu passei, sem qualquer modificação sua ? Você testou da forma que eu enviei ?
Porque o resultado esperado da forma que eu enviei deveria ser o primeiro técnico de cada hora, pois achei que fosse isso que precisava.
Se você quer o primeiro registro de cada hora, de cada técnico, seria assim:
SELECT
LATITUDE,
Sobre sua colocação do ROW_NUMBER() não será a sequencia das linhas na tabela, mas o particionamento e a ordenação especificadas na cláusula OVER. É exatamente ai que é o pulo do gato ! Significa que ele vai começar a ordenar, sempre que a hora, ou id do tecnico mudarem e esta ordem será a data/hora inteira.
LONGITUDE,
USUARIO + '</BR>' + CONVERT(VARCHAR, DATA, 103) + ' ' + CONVERT(VARCHAR, DATA, 108),
ID
FROM (
SELECT
[POS.LATITUDE] LATITUDE,
[POS.LONGITUDE] LONGITUDE,
[USR.USER_NAME] USUARIO,
[POS.DATE] DATA,
[ID_TECHNICAL] ID,
ROW_NUMBER() OVER (PARTITION BY [ID_TECHNICAL], DATEPART(HOUR,POS.DATE) ORDER BY POS.DATE) AS SEQ,
DATEPART(HOUR,POS.DATE) HORA
FROM
TB_POSITION POS
INNER JOIN TB_TECHNICAL TECH ON POS.IMEI = TECH.IMEI
INNER JOIN TB_USER USR ON TECH.ID_USER = USR.ID_USER ) RANKING_HORA
WHERE SEQ = 1
ORDER BY USUARIO, HORAROW_NUMBER() OVER (PARTITION BY [ID_TECHNICAL], DATEPART(HOUR,POS.DATE) ORDER BY POS.DATE)
Depois filtramos as linhas de número 1 dos resultados desta sub-query e ... voilá ! aparecem somente os primeiros registros do particionamento ID, Número da HORA.
Se você precisar fazer alguma modificação na consulta, poste aqui que eu reviso para você.
MCSD Charter Member (since 1995), MCSE+I, MCDBA, MCNPS, MCP+SB, MCTS, MCBSS/MCBSP: Dynamics CRM, MCT
- Editado Sérgio Pinheiro, DevOps and Analytics Expert quarta-feira, 9 de maio de 2012 15:42
- Marcado como Resposta JoojiCorrea quarta-feira, 9 de maio de 2012 15:55
Todas as Respostas
-
Olá Jooji,
Tente usar o row_number,
acho que ficaria mais ou menos assim
WITH CONSULTA_ROWNUMBER AS (SELECT POS.LATITUDE, POS.LONGITUDE, USR.USER_NAME + '</BR>' + CONVERT(VARCHAR, POS.DATE, 103) + ' ' + CONVERT(VARCHAR, POS.DATE, 108), ID_TECHNICAL "ID", ROW_NUMBER() OVER (PARTITION BY TB_USER.ID_USER,DATEPART(HOUR,POS.DATE) ORDER BY DATEPART(MINUTE,POS.DATE)) as ORDEM FROM TB_POSITION POS INNER JOIN TB_TECHNICAL TECH ON POS.IMEI = TECH.IMEI INNER JOIN TB_USER USR ON TECH.ID_USER = USR.ID_USER) SELECT * FROM CONSULTA_ROWNUMBER WHERE ORDEM = 1 ORDER BY ID
Att.
Lukas Baldan- Editado Lukas de Castro Ruocco Baldan terça-feira, 8 de maio de 2012 18:28
- Marcado como Resposta JoojiCorrea quarta-feira, 9 de maio de 2012 16:06
-
Então cara, eu tentei aqui mas não deu certo.
eu preciso de algo que faça tipo um forench, só que não pode haver cursor na query, se não vai deixar a consulta muito lenta já que são muitos cadastros criados por dia.
eu preciso criar algo que verifique todas as horas do dia, e traga pra mim o menor horário de cada ID_Technical
-
-
Veja este exemplo
CREATE TABLE #TEMP( ID INT, NOME VARCHAR(50), DATA DATETIME) GO INSERT INTO #TEMP VALUES (1,'João','2012-05-08 18:25:00'),(1,'João','2012-05-08 18:26:00'),(1,'João','2012-05-08 18:27:00'),(1,'João','2012-05-08 19:25:00'),(1,'João','2012-05-08 19:26:00') INSERT INTO #TEMP VALUES (2,'MARIA','2012-05-08 18:05:00'),(2,'MARIA','2012-05-08 18:26:00'),(2,'MARIA','2012-05-08 18:27:00'),(2,'MARIA','2012-05-08 19:02:00'),(2,'MARIA','2012-05-08 19:26:00'),(2,'MARIA','2012-05-08 20:26:00') SELECT * FROM #TEMP ;WITH CONSULTA_ROWNUMBER AS (SELECT ID,NOME,DATA, ROW_NUMBER() OVER (PARTITION BY ID,DATEPART(HOUR,DATA) ORDER BY DATEPART(MINUTE,DATA)) as ORDEM FROM #TEMP) SELECT ID,NOME,DATA FROM CONSULTA_ROWNUMBER WHERE ORDEM = 1 ORDER BY ID
Att.
Lukas Baldan -
Jooji,
Se eu entendi seu problema, a query abaixo deve resolver, só vai precisar acrescentar o filtro da data, mas ai você é quem tem mais detalhes sobre o critério.
SELECT
LATITUDE,
LONGITUDE,
USUARIO + '</BR>' + CONVERT(VARCHAR, DATA, 103) + ' ' + CONVERT(VARCHAR, DATA, 108),
ID
FROM (
SELECT
[POS.LATITUDE] LATITUDE,
[POS.LONGITUDE] LONGITUDE,
[USR.USER_NAME] USUARIO,
[POS.DATE] DATA,
[ID_TECHNICAL] ID,
ROW_NUMBER() OVER (PARTITION BY DATEPART(HOUR,POS.DATE) ORDER BY POS.DATE) AS SEQ,
DATEPART(HOUR,POS.DATE) HORA
FROM
TB_POSITION POS
INNER JOIN TB_TECHNICAL TECH ON POS.IMEI = TECH.IMEI
INNER JOIN TB_USER USR ON TECH.ID_USER = USR.ID_USER ) RANKING_HORA
WHERE SEQ = 1
ORDER BY HORAAvise se matou o problema com isso, ou passe mais detalhes sobre os resultados.
Um abraço,
Sérgio
MCSD Charter Member (since 1995), MCSE+I, MCDBA, MCNPS, MCP+SB, MCTS, MCBSS/MCBSP: Dynamics CRM, MCT
- Sugerido como Resposta Sérgio Pinheiro, DevOps and Analytics Expert quarta-feira, 9 de maio de 2012 01:00
-
Então, o Row_number não funciona neste caso, porque ele pega linha por linha certo?
só que eu preciso que pegue horário por horário pra saber qual é o menor...
preciso encontrar o menor minuto dentro de todas as 24 horas de cada técnico.
eu preciso fazer algo assim:
NOME LATITUDE LONGITUDE DATA E HORA ID
antonio 1.23536 -1.25635 07/05/2012 00:19:32 1
antonio 1.36562 -1.52365 07/05/2012 01:19:32 1
fabio 1.54155 -1.36548 07/05/2012 00:12:10 2
fabio 1.65896 -1.36589 08/05/2012 13:05:11 2
atualmente tenho esta tabela:
LATITUDE LONGITUDE ID
-23.6320056 -46.64002 Motorola-IS</BR>09/05/2012 08:26:13 290
-23.6320056 -46.64002 Motorola-IS</BR>09/05/2012 08:31:13 290
-23.6320056 -46.64002 Motorola-IS</BR>09/05/2012 00:01:23 290
-23.6320056 -46.64002 Motorola-IS</BR>09/05/2012 00:06:18 290
-23.6320056 -46.64002 Motorola-IS</BR>09/05/2012 00:11:18 290
-23.6320056 -46.64002 Motorola-IS</BR>09/05/2012 00:16:19 290
-23.6320056 -46.64002 Motorola-IS</BR>09/05/2012 08:46:19 290
-23.6320056 -46.64002 Motorola-IS</BR>09/05/2012 08:51:19 290
-23.6320056 -46.64002 Motorola-IS</BR>09/05/2012 08:56:18 290
-23.6320056 -46.64002 Motorola-IS</BR>09/05/2012 09:01:18 290
-23.6320056 -46.64002 Motorola-IS</BR>09/05/2012 09:06:18 290
-23.6320056 -46.64002 Motorola-IS</BR>09/05/2012 09:11:18 290
-23.6320056 -46.64002 Motorola-IS</BR>09/05/2012 08:01:18 290
-23.6320056 -46.64002 Motorola-IS</BR>09/05/2012 08:06:18 290
-23.6320056 -46.64002 Motorola-IS</BR>09/05/2012 08:11:18 290
-23.6320056 -46.64002 Motorola-IS</BR>09/05/2012 08:16:18 290
-23.6320056 -46.64002 Motorola-IS</BR>09/05/2012 08:21:18 290
-23.6320056 -46.64002 Motorola-IS</BR>09/05/2012 08:41:19 290
-23.6320056 -46.64002 Motorola-IS</BR>09/05/2012 07:31:18 290
-23.6320056 -46.64002 Motorola-IS</BR>09/05/2012 07:36:19 290
-23.6320056 -46.64002 Motorola-IS</BR>09/05/2012 07:41:18 290
-23.6320056 -46.64002 Motorola-IS</BR>09/05/2012 07:46:18 290
-23.6320056 -46.64002 Motorola-IS</BR>09/05/2012 07:51:18 290
-23.6320056 -46.64002 Motorola-IS</BR>09/05/2012 07:56:18 290
-23.6320056 -46.64002 Motorola-IS</BR>09/05/2012 07:01:18 290
-23.6320056 -46.64002 Motorola-IS</BR>09/05/2012 07:06:18 290
-23.6320056 -46.64002 Motorola-IS</BR>09/05/2012 07:11:18 290
-23.6320056 -46.64002 Motorola-IS</BR>09/05/2012 07:16:18 290
-23.6320056 -46.64002 Motorola-IS</BR>09/05/2012 07:21:18 290
-23.6320056 -46.64002 Motorola-IS</BR>09/05/2012 07:26:18 290
-23.6320056 -46.64002 Motorola-IS</BR>09/05/2012 06:31:19 290
-23.6320056 -46.64002 Motorola-IS</BR>09/05/2012 06:36:18 290
-23.6320056 -46.64002 Motorola-IS</BR>09/05/2012 06:41:18 290
-23.6320056 -46.64002 Motorola-IS</BR>09/05/2012 06:46:19 290
-23.6320056 -46.64002 Motorola-IS</BR>09/05/2012 06:51:19 290
-23.6320056 -46.64002 Motorola-IS</BR>09/05/2012 06:56:18 290
-23.6320056 -46.64002 Motorola-IS</BR>09/05/2012 06:01:18 290
-23.6320056 -46.64002 Motorola-IS</BR>09/05/2012 06:06:19 290
-23.6320056 -46.64002 Motorola-IS</BR>09/05/2012 06:11:18 290
-23.6320056 -46.64002 Motorola-IS</BR>09/05/2012 06:16:18 290
-23.6320056 -46.64002 Motorola-IS</BR>09/05/2012 06:21:18 290
-23.6320056 -46.64002 Motorola-IS</BR>09/05/2012 06:26:18 290
-23.6320056 -46.64002 Motorola-IS</BR>09/05/2012 05:31:19 290
-23.6320056 -46.64002 Motorola-IS</BR>09/05/2012 05:36:18 290
-23.6320056 -46.64002 Motorola-IS</BR>09/05/2012 05:41:18 290
-23.6320056 -46.64002 Motorola-IS</BR>09/05/2012 05:46:18 290
-23.6320056 -46.64002 Motorola-IS</BR>09/05/2012 05:51:18 290
-23.6320056 -46.64002 Motorola-IS</BR>09/05/2012 05:56:18 290
-23.6320056 -46.64002 Motorola-IS</BR>09/05/2012 05:01:18 290
-23.6320056 -46.64002 Motorola-IS</BR>09/05/2012 05:06:18 290
-23.6320056 -46.64002 Motorola-IS</BR>09/05/2012 05:11:18 290
-23.6320056 -46.64002 Motorola-IS</BR>09/05/2012 05:16:19 290
-23.6320056 -46.64002 Motorola-IS</BR>09/05/2012 05:21:18 290
-23.6320056 -46.64002 Motorola-IS</BR>09/05/2012 05:26:18 290
-23.6320056 -46.64002 Motorola-IS</BR>09/05/2012 04:31:18 290
-23.6320056 -46.64002 Motorola-IS</BR>09/05/2012 04:36:18 290
-23.6320056 -46.64002 Motorola-IS</BR>09/05/2012 04:41:18 290
-23.6320056 -46.64002 Motorola-IS</BR>09/05/2012 04:46:18 290
-23.6320056 -46.64002 Motorola-IS</BR>09/05/2012 04:51:18 290
-23.6320056 -46.64002 Motorola-IS</BR>09/05/2012 04:56:19 290
-23.6320056 -46.64002 Motorola-IS</BR>09/05/2012 04:01:18 290
-23.6320056 -46.64002 Motorola-IS</BR>09/05/2012 04:06:18 290
-23.6320056 -46.64002 Motorola-IS</BR>09/05/2012 04:11:18 290
-23.6320056 -46.64002 Motorola-IS</BR>09/05/2012 04:16:18 290
-23.6320056 -46.64002 Motorola-IS</BR>09/05/2012 04:21:18 290
-23.6320056 -46.64002 Motorola-IS</BR>09/05/2012 04:26:18 290
-23.6320056 -46.64002 Motorola-IS</BR>09/05/2012 03:31:19 290
-23.6320056 -46.64002 Motorola-IS</BR>09/05/2012 03:36:18 290
-23.6320056 -46.64002 Motorola-IS</BR>09/05/2012 03:41:18 290
-23.6320056 -46.64002 Motorola-IS</BR>09/05/2012 03:46:18 290
-23.6320056 -46.64002 Motorola-IS</BR>09/05/2012 03:51:18 290
-23.6320056 -46.64002 Motorola-IS</BR>09/05/2012 03:56:18 290
-23.6320056 -46.64002 Motorola-IS</BR>09/05/2012 03:01:19 290
-23.6320056 -46.64002 Motorola-IS</BR>09/05/2012 03:06:18 290
-23.6320056 -46.64002 Motorola-IS</BR>09/05/2012 03:11:18 290
-23.6320056 -46.64002 Motorola-IS</BR>09/05/2012 03:16:18 290
-23.6320056 -46.64002 Motorola-IS</BR>09/05/2012 03:21:18 290
-23.6320056 -46.64002 Motorola-IS</BR>09/05/2012 03:26:18 290
-23.6320056 -46.64002 Motorola-IS</BR>09/05/2012 02:31:18 290
-23.6320056 -46.64002 Motorola-IS</BR>09/05/2012 02:36:18 290
-23.6320056 -46.64002 Motorola-IS</BR>09/05/2012 02:41:19 290
-23.6320056 -46.64002 Motorola-IS</BR>09/05/2012 02:46:18 290
-23.6320056 -46.64002 Motorola-IS</BR>09/05/2012 02:51:18 290
-23.6320056 -46.64002 Motorola-IS</BR>09/05/2012 02:56:19 290
-23.6320056 -46.64002 Motorola-IS</BR>09/05/2012 02:11:18 290
-23.6320056 -46.64002 Motorola-IS</BR>09/05/2012 02:16:18 290
-23.6320056 -46.64002 Motorola-IS</BR>09/05/2012 02:21:18 290
-23.6320056 -46.64002 Motorola-IS</BR>09/05/2012 02:26:18 290
-23.6320056 -46.64002 Motorola-IS</BR>09/05/2012 09:16:13 290
-23.6320056 -46.64002 Motorola-IS</BR>09/05/2012 02:26:18 290
-23.6320056 -46.64002 Motorola-IS</BR>09/05/2012 01:41:18 290
-23.6320056 -46.64002 Motorola-IS</BR>09/05/2012 01:46:18 290
-23.6320056 -46.64002 Motorola-IS</BR>09/05/2012 01:51:18 290
-23.6320056 -46.64002 Motorola-IS</BR>09/05/2012 01:56:18 290
-23.6320056 -46.64002 Motorola-IS</BR>09/05/2012 02:01:19 290
-23.6320056 -46.64002 Motorola-IS</BR>09/05/2012 02:06:18 290
-23.6320056 -46.64002 Motorola-IS</BR>09/05/2012 01:11:18 290
-23.6320056 -46.64002 Motorola-IS</BR>09/05/2012 01:16:19 290
-23.6320056 -46.64002 Motorola-IS</BR>09/05/2012 01:21:18 290
-23.6320056 -46.64002 Motorola-IS</BR>09/05/2012 01:26:26 290
-23.6320056 -46.64002 Motorola-IS</BR>09/05/2012 01:31:18 290
-23.6320056 -46.64002 Motorola-IS</BR>09/05/2012 01:36:19 290
-23.6320056 -46.64002 Motorola-IS</BR>09/05/2012 00:51:18 290
-23.6320056 -46.64002 Motorola-IS</BR>09/05/2012 00:56:18 290
-23.6320056 -46.64002 Motorola-IS</BR>09/05/2012 01:01:18 290
-23.6320056 -46.64002 Motorola-IS</BR>09/05/2012 01:06:18 290
-23.6320056 -46.64002 Motorola-IS</BR>09/05/2012 01:11:18 290
-23.6320056 -46.64002 Motorola-IS</BR>09/05/2012 08:36:13 290
-23.6320056 -46.64002 Motorola-IS</BR>09/05/2012 00:21:18 290
-23.6320056 -46.64002 Motorola-IS</BR>09/05/2012 00:26:18 290
-23.6320056 -46.64002 Motorola-IS</BR>09/05/2012 00:31:18 290
-23.6320056 -46.64002 Motorola-IS</BR>09/05/2012 00:36:19 290
-23.6320056 -46.64002 Motorola-IS</BR>09/05/2012 00:41:18 290
-23.6320056 -46.64002 Motorola-IS</BR>09/05/2012 00:46:19 290
-23.6342138 -46.6404879 MARIA DAS GRAÇAS</BR>09/05/2012 08:22:26 299
-23.6342434 -46.6405358 MARIA DAS GRAÇAS</BR>09/05/2012 08:27:26 299
-23.6341933 -46.6405799 MARIA DAS GRAÇAS</BR>09/05/2012 08:32:26 299
-23.6342256 -46.6405704 MARIA DAS GRAÇAS</BR>09/05/2012 09:12:26 299
-23.7408684 -46.7008405 Herivelto A Junior </BR>09/05/2012 04:26:57 303
-23.7408684 -46.7008405 Herivelto A Junior </BR>09/05/2012 04:31:56 303
-23.7408684 -46.7008405 Herivelto A Junior </BR>09/05/2012 04:36:56 303
-23.7408684 -46.7008405 Herivelto A Junior </BR>09/05/2012 04:41:56 303
-23.7408684 -46.7008405 Herivelto A Junior </BR>09/05/2012 04:46:56 303
-23.7408684 -46.7008405 Herivelto A Junior </BR>09/05/2012 04:51:56 303
-23.7408684 -46.7008405 Herivelto A Junior </BR>09/05/2012 08:56:56 303
-23.7408684 -46.7008405 Herivelto A Junior </BR>09/05/2012 09:01:57 303
-23.7153066 -46.6986835 Herivelto A Junior </BR>09/05/2012 09:07:00 303
-23.7153066 -46.6986835 Herivelto A Junior </BR>09/05/2012 09:11:57 303
-23.7408684 -46.7008405 Herivelto A Junior </BR>09/05/2012 08:26:56 303
-23.7408684 -46.7008405 Herivelto A Junior </BR>09/05/2012 08:31:57 303
-23.7408684 -46.7008405 Herivelto A Junior </BR>09/05/2012 08:36:56 303
-23.7408684 -46.7008405 Herivelto A Junior </BR>09/05/2012 08:41:56 303
-23.7408684 -46.7008405 Herivelto A Junior </BR>09/05/2012 08:46:56 303
-23.7408684 -46.7008405 Herivelto A Junior </BR>09/05/2012 08:51:57 303
-23.7408684 -46.7008405 Herivelto A Junior </BR>09/05/2012 07:56:56 303
-23.7408684 -46.7008405 Herivelto A Junior </BR>09/05/2012 08:01:56 303
-23.7408684 -46.7008405 Herivelto A Junior </BR>09/05/2012 08:06:56 303
-23.7408684 -46.7008405 Herivelto A Junior </BR>09/05/2012 08:12:00 303
-23.7408684 -46.7008405 Herivelto A Junior </BR>09/05/2012 08:16:56 303
-23.7408684 -46.7008405 Herivelto A Junior </BR>09/05/2012 08:21:56 303
-23.7408684 -46.7008405 Herivelto A Junior </BR>09/05/2012 07:26:56 303
-23.7408684 -46.7008405 Herivelto A Junior </BR>09/05/2012 07:31:57 303
-23.7408684 -46.7008405 Herivelto A Junior </BR>09/05/2012 07:36:57 303
-23.7408684 -46.7008405 Herivelto A Junior </BR>09/05/2012 07:41:56 303
-23.7408684 -46.7008405 Herivelto A Junior </BR>09/05/2012 07:46:56 303
-23.7408684 -46.7008405 Herivelto A Junior </BR>09/05/2012 07:51:57 303
-23.7408684 -46.7008405 Herivelto A Junior </BR>09/05/2012 06:57:12 303
-23.7408684 -46.7008405 Herivelto A Junior </BR>09/05/2012 07:01:57 303
-23.7408684 -46.7008405 Herivelto A Junior </BR>09/05/2012 07:06:56 303
-23.7408684 -46.7008405 Herivelto A Junior </BR>09/05/2012 07:11:56 303
-23.7408684 -46.7008405 Herivelto A Junior </BR>09/05/2012 07:16:56 303
-23.7408684 -46.7008405 Herivelto A Junior </BR>09/05/2012 07:21:56 303
-23.7408684 -46.7008405 Herivelto A Junior </BR>09/05/2012 06:26:56 303
-23.7408684 -46.7008405 Herivelto A Junior </BR>09/05/2012 06:31:56 303
-23.7408684 -46.7008405 Herivelto A Junior </BR>09/05/2012 06:36:56 303
-23.7408684 -46.7008405 Herivelto A Junior </BR>09/05/2012 06:41:56 303
-23.7408684 -46.7008405 Herivelto A Junior </BR>09/05/2012 06:46:56 303
-23.7408684 -46.7008405 Herivelto A Junior </BR>09/05/2012 06:51:57 303
-23.7408684 -46.7008405 Herivelto A Junior </BR>09/05/2012 05:56:56 303
-23.7408684 -46.7008405 Herivelto A Junior </BR>09/05/2012 06:01:56 303
-23.7408684 -46.7008405 Herivelto A Junior </BR>09/05/2012 06:06:56 303
-23.7408684 -46.7008405 Herivelto A Junior </BR>09/05/2012 06:11:56 303
-23.7408684 -46.7008405 Herivelto A Junior </BR>09/05/2012 06:16:56 303
-23.7408684 -46.7008405 Herivelto A Junior </BR>09/05/2012 06:21:56 303
-23.7408684 -46.7008405 Herivelto A Junior </BR>09/05/2012 05:26:56 303
-23.7408684 -46.7008405 Herivelto A Junior </BR>09/05/2012 05:31:57 303
-23.7408684 -46.7008405 Herivelto A Junior </BR>09/05/2012 05:36:56 303
-23.7408684 -46.7008405 Herivelto A Junior </BR>09/05/2012 05:41:57 303Eu preciso:
-23.6320056 -46.64002 Motorola-IS</BR>09/05/2012 00:01:23 290
-23.6320056 -46.64002 Motorola-IS</BR>09/05/2012 01:11:18 290
-23.6320056 -46.64002 Motorola-IS</BR>09/05/2012 02:01:19 290
-23.6320056 -46.64002 Motorola-IS</BR>09/05/2012 04:01:18 290
-23.6320056 -46.64002 Motorola-IS</BR>09/05/2012 05:01:18 290
-23.6320056 -46.64002 Motorola-IS</BR>09/05/2012 07:01:18 290
-23.6320056 -46.64002 Motorola-IS</BR>09/05/2012 08:01:18 290
-23.6320056 -46.64002 Motorola-IS</BR>09/05/2012 09:01:18 290
-23.6342256 -46.6405704 MARIA DAS GRAÇAS</BR>09/05/2012 09:12:26 299
-23.7408684 -46.7008405 Herivelto A Junior </BR>09/05/2012 04:26:57 303
-23.7408684 -46.7008405 Herivelto A Junior </BR>09/05/2012 05:31:57 303
-23.7408684 -46.7008405 Herivelto A Junior </BR>09/05/2012 06:01:56 303
-23.7408684 -46.7008405 Herivelto A Junior </BR>09/05/2012 07:01:57 303
-23.7408684 -46.7008405 Herivelto A Junior </BR>09/05/2012 08:01:56 303
-23.7408684 -46.7008405 Herivelto A Junior </BR>09/05/2012 09:01:57 303
Entenderam?, preciso de uma query que filtre os menores minutos dde todas as horas de CADA técnico
-
Esse primeiro foi o resultado da query que eu passei, sem qualquer modificação sua ? Você testou da forma que eu enviei ?
Porque o resultado esperado da forma que eu enviei deveria ser o primeiro técnico de cada hora, pois achei que fosse isso que precisava.
Se você quer o primeiro registro de cada hora, de cada técnico, seria assim:
SELECT
LATITUDE,
Sobre sua colocação do ROW_NUMBER() não será a sequencia das linhas na tabela, mas o particionamento e a ordenação especificadas na cláusula OVER. É exatamente ai que é o pulo do gato ! Significa que ele vai começar a ordenar, sempre que a hora, ou id do tecnico mudarem e esta ordem será a data/hora inteira.
LONGITUDE,
USUARIO + '</BR>' + CONVERT(VARCHAR, DATA, 103) + ' ' + CONVERT(VARCHAR, DATA, 108),
ID
FROM (
SELECT
[POS.LATITUDE] LATITUDE,
[POS.LONGITUDE] LONGITUDE,
[USR.USER_NAME] USUARIO,
[POS.DATE] DATA,
[ID_TECHNICAL] ID,
ROW_NUMBER() OVER (PARTITION BY [ID_TECHNICAL], DATEPART(HOUR,POS.DATE) ORDER BY POS.DATE) AS SEQ,
DATEPART(HOUR,POS.DATE) HORA
FROM
TB_POSITION POS
INNER JOIN TB_TECHNICAL TECH ON POS.IMEI = TECH.IMEI
INNER JOIN TB_USER USR ON TECH.ID_USER = USR.ID_USER ) RANKING_HORA
WHERE SEQ = 1
ORDER BY USUARIO, HORAROW_NUMBER() OVER (PARTITION BY [ID_TECHNICAL], DATEPART(HOUR,POS.DATE) ORDER BY POS.DATE)
Depois filtramos as linhas de número 1 dos resultados desta sub-query e ... voilá ! aparecem somente os primeiros registros do particionamento ID, Número da HORA.
Se você precisar fazer alguma modificação na consulta, poste aqui que eu reviso para você.
MCSD Charter Member (since 1995), MCSE+I, MCDBA, MCNPS, MCP+SB, MCTS, MCBSS/MCBSP: Dynamics CRM, MCT
- Editado Sérgio Pinheiro, DevOps and Analytics Expert quarta-feira, 9 de maio de 2012 15:42
- Marcado como Resposta JoojiCorrea quarta-feira, 9 de maio de 2012 15:55
-
-