2014-01-09 2 views
1

У меня есть следующая таблицаобратного RANK с использованием MYSQL

Member  Date Joined 
------  ----------- 
Alan  01/02/2014 
Bob   01/02/2013 
Phil  01/02/2012 
Bert  01/02/2011 

, но я хотел бы, чтобы ранжировать их в обратном порядке, в то время сохраняя результаты Дата Дата заказа заказа. I.e Я хотел бы вывести

No Member  Date Joined 
-- ------  ---------- 
4 Alan  01/02/2014 
3 Bob   01/02/2013 
2 Phil  01/02/2012 
1 Bert  01/02/2011 

С уверенностью с чего начать? Какие-нибудь идеи кто-нибудь?

+0

@FDL Я предполагаю, что это Дата регистрации. – tyteen4a03

ответ

0

Если предположить, что таблица является myTable и имеет member и date_joined столбцы, попробуйте этот запрос:

SELECT * FROM (
    SELECT IF(@prev <> date_joined, @s:[email protected]+1, @s:[email protected]) AS `rank`, 
    member, @prev:=date_joined date_joined 
    FROM 
    myTable, (SELECT @s:= 1, @prev:= 0) s 
    ORDER BY date_joined 
) t 
ORDER BY rank DESC 

Запрос держит встречное переменную @s, который увеличивается, когда date_joined значение отличается от date_joined стоимости предыдущей пластинки.

1

Вы можете использовать стандартные «создать номера строк» ​​рутину для MySQL в качестве внутреннего запроса, а затем выберите из него в обратном порядке:

select 
    member, 
    date_joined 
    rank 
from (
    select 
     member, 
     date_joined, 
     @rank := @rank + 1 as rank 
    from 
     members 
     join (select @rank := 0) r 
    order by 
     date_joined asc 
) foo 
order by rank desc 
Смежные вопросы