Tenho uma consulta que retorna algumas linhas tendo um agrupamento em uma coluna e datas. Eu gostaria que essa consulta indicasse em uma coluna qual de cada grupo tem a maior data.
Há um grande número de perguntas sobre como fazer o "maior n por grupo", mas essas perguntas querem apenas a linha de cada grupo com o maior valor. Eu quero todas as linhas, e apenas uma indicação de qual é a maior.
Por exemplo, aqui está uma tabela:
Eu iria | representante | encontro |
---|---|---|
1 | 27058 | 16-11-2020 |
2 | 27058 | 09-11-2020 |
3 | 27058 | 30-10-2020 |
4 | 46029 | 03-11-2020 |
Eu gostaria de ter algo como o seguinte:
Eu iria | representante | encontro | o melhor |
---|---|---|---|
1 | 27058 | 16-11-2020 | 1 |
2 | 27058 | 09-11-2020 | 0 |
3 | 27058 | 30-10-2020 | 0 |
4 | 46029 | 03-11-2020 | 1 |
Eu experimentei alguns métodos de maior n por grupo para adicionar um indicador "maior". Mas como essas tentativas são focadas na única linha com o maior valor, quando a parte da cláusula where como "table2.date IS NULL" é removida, linhas extras são adicionadas com todas as combinações de junção.
Aqui está um exemplo de um experimento que não funciona. Ele tenta usar o maior n-por-grupo, mas comenta a linha IS NULL:
SELECT DISTINCT m1.usermessageid, m1.repid, m1.sender_role, m1.message, m1.datesent, m2.datesent
FROM usermessage m1
LEFT JOIN usermessage m2 ON m1.principalid = m2.principalid and m1.repid = m2.repid AND m1.datesent < m2.datesent
WHERE m1.principalid = 99831
AND m1.repid IN (21600,99214,27058,97360,92678,96184,55429,46029)
# AND m2.datesent IS NULL
ORDER BY m1.datesent desc;
Gostaria de evitar ter que adicionar uma consulta adicional apenas para obter as maiores linhas.
Use uma função de janela:
Isso requer MySQL 8.0.02 ou MariaDB 10.2.0 para usar funções de janela.