2014-02-06 1 views
1

Я использую пользовательский пейджинг в своем приложении, поэтому каждый раз, когда я извлекаю последние 10 записей из своей базы данных и отображаются в своем приложении.Dense Rank с пейджингом и заказом от

Моя проблема

Я хочу получать последнюю информацию о пользователе сверху.

При извлечении информации каждый пользователь имеет более одной строки, поэтому я использую функцию dense_rank для группировки этих записей.

, например

 
RRowNo UserID Location CreatedOn 

1  Avsih  Delhi  06-02-2014 
1  Avsih  Mumbai  06-02-2014 
1  Avsih  Kerala  06-02-2014 
2  Nimmi  UP   06-02-2014 
3  Rahul1 Delhi  06-02-2014 
4  Rahul2 Mumbai  06-02-2014 
5  Rahul3 Kerala  06-02-2014 
6  Rahul4 UP   06-02-2014 
7  Rahul5 Delhi  06-02-2014 
8  Rahul6 Mumbai  06-02-2014 
9  Rahul7 Kerala  06-02-2014 
10  Rahul8 UP   06-02-2014 
11  Rahul9 UP   07-02-2014 

Рассмотрим мое имя таблицы EMP

Мой запрос

select * 
from (
    select dense_rank() over (order by userid asc) as rowno, 
    from emp 
) as tab 
where rowno>='1' and rowno<='10' 
order by Createdon desc 

Rahul9 моя последняя запись (т.е. createdon должен быть 07/02/2014) Я хочу, чтобы эта запись была самой большой. Но, используя этот запрос, я не могу извлечь , поэтому, пожалуйста, помогите изменить этот запрос.

+0

Пожалуйста, не сравнить яблоки (номера) с апельсинами (строк). «1» - значение символа. '1' - это число. И добавьте тег для используемой СУБД (Postgres, Oracle, ...) –

ответ

1

Я думаю, что вы хотите, чтобы пользователи использовали самые последние createdon. Предполагая, что createon является одинаковым для всех пользователей, попробуйте:

select * 
from (select dense_rank() over (order by createdon desc, userid asc) as rowno 
     from emp 
    ) tab 
where rowno >= 1 and rowno <= 10 
order by Createdon desc; 
+0

Да, я хочу, чтобы последние созданные записи сначала Ваш запрос отлично работает Thanks Gordon, Фактически, в первый раз я использую функцию ранжирования, поэтому у меня нет идеи mush. – user3278909

+0

@ пользователь3278909. , , Они очень мощные и веселые (для таких людей, как я), чтобы узнать. –

0

Суб запроса, такие как

select * from (select dense_rank() over (order by userid asc) as rowno, * from emp 
inner join (select userid,MAX(CreatedOn) AS MaxCreatedOn FROM emp GROUP BY userid) a ON a.userid = emp.userid 
) as tab where rowno>='1' and rowno<='10' order by a.MaxCreatedon desc 

Где вы получаете самую последнюю дату для каждого пользователя, а затем присоединиться к тому, что может сделать трюк?

+0

Выполняю над запросом оба запроса одинаковы. запись rahul9 все еще находится на 11-ю позицию т.е. ее Ровно должно быть 11 выберите * от (выберите DENSE_RANK() по (порядка по возрастанию SAmple.userid) в Ровно, а. * От Sample внутреннее соединение (выберите userid, MAX (CreatedOn) AS MaxCreatedOn FROM SAmple GROUP BY userid) a ON a.userid = SAmple.userid ) как вкладка - где rowno> = '1' и rowno <= '10' заказать по tab.MaxCreatedon desc – user3278909

+0

Я не заметил, что созданный был таким же для всех пользователей, извините. –

 Смежные вопросы

  • Нет связанных вопросов^_^