none
Manipulação com SQL / problemas com Lógica RRS feed

  • 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

    terça-feira, 8 de maio de 2012 17:57

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


    terça-feira, 8 de maio de 2012 18:28
  • 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,
      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, HORA

    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.

    ROW_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



    quarta-feira, 9 de maio de 2012 14:11

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


    terça-feira, 8 de maio de 2012 18:28
  • 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

    terça-feira, 8 de maio de 2012 19:31
  • O que deu de errado? 


    Att.
    Lukas Baldan

    terça-feira, 8 de maio de 2012 19:52
  • 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

    terça-feira, 8 de maio de 2012 19:58
  • 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 HORA

    Avise 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

    quarta-feira, 9 de maio de 2012 00:58
  • 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 303

    Eu 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



    quarta-feira, 9 de maio de 2012 12:31
  • 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,
      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, HORA

    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.

    ROW_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



    quarta-feira, 9 de maio de 2012 14:11
  • Cara, MUITO obrigado!

    Funcionou como eu queria!

    Deu pra implementar no sistema,

    Valeu mesmo,salvou a vida!
    quarta-feira, 9 de maio de 2012 15:55
  • Legal. Um abraço!

    MCSD Charter Member (since 1995), MCSE+I, MCDBA, MCNPS, MCP+SB, MCTS, MCBSS/MCBSP: Dynamics CRM, MCT

    quarta-feira, 9 de maio de 2012 16:17