Аналитические функции в SQL Server 2005 - PullRequest
2 голосов
/ 09 ноября 2010

У меня есть запрос, который работает в ORACLE, но не работает в SQL SERVER 2005 ... Как я могу преобразовать этот запрос для работы в SQL SERVER 2005.

select user_name
       , url
       , count(*)
       ,first_value(count(*)) over (partition by user_name 
                                    order by count(*) desc) max_total
from urls
group by user_name, url
order by max_total desc,user_name

Результат: alt text

Ответы [ 3 ]

2 голосов
/ 09 ноября 2010

Поскольку мой комментарий большой, я напишу его как ответ: (

@ tanging. Это не очень правильно, но есть правильный путь ... Возможно, я решил эту проблему с помощью запросов, но хотелэто по аналитическим функциям .... Мой запрос это

select urls.user_name
       ,urls.url
       ,count(*) ct
       ,max_amount 
from urls
     ,(select user_name
              ,max(amount) max_amount
       from (select user_name
                    ,url
                    ,count(*) amount
             from urls
             group by user_name,url)  t1
       group by user_name) t2
where urls.user_name=t2.user_name
group by urls.user_name,urls.url,max_amount
order by max_amount desc,urls.user_name,ct desc
1 голос
/ 09 ноября 2010

@ tanging Это тестовые данные ...

create table urls(
user_name varchar2(100),
url varchar2(100)
);


insert into urls
values('mariami','google.com');
insert into urls
values('mariami','google.com');
insert into urls
values('mariami','google.com');
insert into urls
values('giorgi','google.com');
insert into urls
values('giorgi','google.com');
insert into urls
values('giorgi','facebook.com');
insert into urls
values('giorgi','facebook.com');
insert into urls
values('giorgi','facebook.com');
insert into urls
values('giorgi','facebook.com');
insert into urls
values('mariami','facebook.com');
insert into urls
values('a','facebook.com');

Результат моего запроса: alt text

И результат вашего запроса: alt text

0 голосов
/ 09 ноября 2010
WITH    q AS
        (
        SELECT  user_name, url, COUNT(*) AS cnt
        FROM    urls
        GROUP BY
                user_name, url
        )
SELECT  *
FROM    q qo
CROSS APPLY
        (
        SELECT  TOP 1 cnt
        FROM    q qi
        WHERE   qi.user_name = qo.user_name
        ORDER BY
                cnt DESC
        ) qi
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...