2010-08-12 4 views
0

Existe-t-il un moyen d'obtenir une ligne qui a le MAX() lorsque deux champs sont considérés, en donnant l'un d'entre eux la priorité. Par exempleHierarchical MAX

ID  Column_A  Column_B 
---------------------------- 
1  1    3 
2  3    2 
3  2    2 
4  3    1 

reviendriez

ID  Column_A  Column_B 
---------------------------- 
2  3    2 

Parce que sont MAX sur column_a est à la fois ID 2 et 4, mais # 2 "victoires" sur Column_B.

Ce que je voudrais cette requête à faire, en pseudocode:

If (It's the MAX on A, tied with nothing) 
    Return it 
Else If (It's tied for MAX on A and it's MAX [or tied] on B) 
    Return it 

Répondre

1

Vous pouvez essayer ...

SELECT * 
    FROM mytable 
    ORDER BY Column_A DESC, Column_B DESC 
    LIMIT 1; 

(si je comprends bien la question).

Edité comme Matthew Purdon aimablement suggéré.

+0

Existe-t-il une condition que je pourrais mettre dans une clause WHERE ou HAVING? Parce que je l'utilise dans une autre requête qui nécessite plusieurs lignes. – babonk

+0

Vous pourriez mettre une clause 'WHERE' après le' FROM' et avant le 'ORDER BY'. Si vous utilisez ceci dans une autre requête, vous pouvez supprimer la clause 'LIMIT'. Vous ne pouvez pas utiliser 'HAVING' sans une clause' GROUP BY', et je ne vois aucun de ceux-ci apparaître dans la description du problème. –

+1

Puisque c'est le MAX qu'il veut, il devrait être: ORDER BY Column_A DESC, Column_B DESC –