Оценить в MySQL - PullRequest
       6

Оценить в MySQL

0 голосов
/ 17 сентября 2009

Я прочитал эту статью , и у меня есть код в Oracle, но я хочу преобразовать его для работы на MySQL. В Oracle, я использую функцию ранга, с четырьмя столбцами может иметь право или нет, как я могу использовать это в MySQL или, это невозможно?

Это код, я хочу выбрать наиболее подходящую строку, каждая строка может иметь 4 столбца, я хочу ранжировать один из которых содержит больше данных.

SELECT vlr,
       data
INTO   vn_vlr,
       vd_data
FROM (SELECT a.*, rank() over (ORDER BY nvl(a.id_categoria, -1) DESC,
             nvl(a.id_peso, -1) DESC,
             nvl(a.id_faixa, -1) DESC,
             nvl(a.sexo, ' ') DESC ) rank
        FROM tab_regra_pagamento a
       WHERE a.id_competicao = pidcompedticao
         AND a.tipo = 'NORMAL'
         AND a.data_vencimento > SYSDATE
         AND nvl(a.id_categoria, vid_categoria) = vid_categoria
         AND nvl(a.id_faixa, vid_faixa) = vid_faixa
         AND nvl(a.id_peso, vid_peso) = vid_peso
         AND nvl(a.sexo, vsexo) = vsexo)
WHERE  rank = 1;

1 Ответ

3 голосов
/ 17 сентября 2009
SELECT  @rank := @rank + (@value <> value),
        @value := value
FROM    (
        SELECT  @rank := 0,
                @value := -1
        ) vars,
        mytable
ORDER BY
        value

В вашем случае, когда вам просто нужны все копии первого набора значений:

SELECT  vlr, data
FROM    tab_regra_pagamento a
WHERE   a.id_competicao = pidcompedticao
        AND a.tipo = 'NORMAL'
        AND a.data_vencimento > SYSDATE
        AND (a.id_cetegoria, a.id_faixa, a.id_peso, a.sexo) =
        (
        SELECT  ai.id_cetegoria, ai.id_faixa, ai.id_peso, ai.sexo
        FROM    tab_regra_pagamento ai
        WHERE   ai.id_competicao = pidcompedticao
                AND ai.tipo = 'NORMAL'
                AND ai.data_vencimento > SYSDATE
        ORDER BY
                a.id_cetegoria DESC, a.id_faixa DESC, a.id_peso DESC, a.sexo DESC
        LIMIT 1
        )
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...