+ Responder ao Tópico



  1. #1

    Padrão Ordenar corretamente registros com GROUP BY

    Tenho a seguinte query:

    select usermac.nome, signallog.datetime
    FROM usermac, signallog
    WHERE usermac.mac=signallog.mac
    ORDER BY usermac.nome ASC, signallog.datetime DESC

    Que Resulta:


    nome datetime
    4jnp 2011-03-15 20:20:10
    4jnp 2011-03-15 20:10:12
    4jnp 2011-03-15 20:00:10
    4jnp 2011-03-15 18:20:10
    4jnp 2011-03-15 18:10:11
    4jnp 2011-03-15 18:00:14
    4jnp 2011-03-15 17:50:17
    4jnp 2011-03-15 17:40:19
    4jnp 2011-03-15 17:30:15
    abadiobanananp 2011-03-16 08:00:09
    abadiobanananp 2011-03-16 07:50:07
    abadiobanananp 2011-03-16 07:40:07
    abadiobanananp 2011-03-16 07:30:06
    abadiobanananp 2011-03-16 07:20:06
    abadiobanananp 2011-03-16 07:10:06
    abadiobanananp 2011-03-16 07:00:07

    Até aqui tudo bem, porém preciso agrupar estes registros com GROUP BY para aparecer apenas 1 (um) usuário e o último DATETIME.

    Fica assim:

    select usermac.nome, signallog.datetime
    FROM usermac, signallog
    WHERE usermac.mac=signallog.mac
    GROUP BY usermac.nome
    ORDER BY usermac.nome ASC, signallog.datetime DESC

    Resulta:

    nome datetime
    4jnp 2011-03-15 17:30:15
    abadiobanananp 2011-03-14 21:46:42

    O datetime que retorna é o mais antigo e não o mais atual.

    Preciso deste tipo de resultado:

    nome datetime
    4jnp 2011-03-15 20:20:10
    abadiobanananp 2011-03-16 08:00:09

    Se alguém tiver uma idéia de como montar a query SQL para resultar assim, ficarei muito grato!

  2. #2

    Padrão Re: Ordenar corretamente registros com GROUP BY

    Tenta assim
    select usermac.nome, MAX(signallog.datetime)
    FROM usermac, signallog
    WHERE usermac.mac=signallog.mac
    GROUP BY usermac.nome
    ORDER BY usermac.nome ASC

  3. #3

    Padrão Re: Ordenar corretamente registros com GROUP BY

    Maxwell, obrigado pela dica!
    Eu consegui de outra forma, usando SubQueries, dessa forma:

    SELECT *
    FROM (
    SELECT usermac.nome, usermac.mac, signallog.datetime
    FROM usermac, signallog
    WHERE usermac.mac = signallog.mac
    ORDER BY signallog.datetime DESC
    )s2
    GROUP BY s2.nome
    ORDER BY s2.nome ASC

    No mais, agradeço a atenção.