Добро пожаловать в форум, Guest  >>   Войти | Регистрация | Поиск | Правила | В избранное | Подписаться
Все форумы / Microsoft SQL Server Новый топик    Ответить
 Запрос с DISTINCT  [new]
overwriter
Member

Откуда:
Сообщений: 199
DECLARE @tempIdTable TABLE (ID uniqueidentifier, [RANK] int);
INSERT INTO @tempIdTable SELECT A.ID, KEY_TBL.[RANK] 
FROM dbo.Advert AS A INNER JOIN FREETEXTTABLE(dbo.AdvertsView_en, TextData, ' FORMSOF (INFLECTIONAL, \"drive\") ', LANGUAGE 'English') 
AS KEY_TBL ON A.ID = KEY_TBL.[KEY];

INSERT INTO @tempIdTable SELECT A.ID, KEY_TBL.[RANK] 
FROM dbo.Advert AS A INNER JOIN FREETEXTTABLE(dbo.AdvertsView_no, TextData, ' FORMSOF (INFLECTIONAL, \"drive\") ', LANGUAGE 'Norwegian') 
AS KEY_TBL ON A.ID = KEY_TBL.[KEY];

SELECT DISTINCT A.*, B.[RANK] FROM Advert AS A INNER JOIN @tempIdTable AS B ON A.ID = B.ID 
WHERE A.ID IN (SELECT DISTINCT ID FROM @tempIdTable) AND A.AdvertStateID = 3
ORDER BY B.[RANK]

Второй запрос, который вставляет айдишки во временную таблицу плодит дубликаты
И в селекте не могу от них избавиться, потому что в этих дубликатах разный RANK как избавиться?
15 июн 11, 19:11    [10818377]     Ответить | Цитировать Сообщить модератору
 Re: Запрос с DISTINCT  [new]
stimpi
Member

Откуда: Киев, Украина
Сообщений: 662
subquery
15 июн 11, 19:31    [10818441]     Ответить | Цитировать Сообщить модератору
 Re: Запрос с DISTINCT  [new]
overwriter
Member

Откуда:
Сообщений: 199
stimpi,

вот, да и беру максимальное значение в subquery) подходит в целом, спасибо)
16 июн 11, 10:48    [10820285]     Ответить | Цитировать Сообщить модератору
 Re: Запрос с DISTINCT  [new]
overwriter
Member

Откуда:
Сообщений: 199
DECLARE @tempIdTable TABLE (ID uniqueidentifier, [RANK] int);

INSERT INTO @tempIdTable SELECT A.ID, KEY_TBL.[RANK] 
FROM dbo.Advert AS A INNER JOIN FREETEXTTABLE(dbo.AdvertsView_en, TextData, 'drive', LANGUAGE 'English') AS KEY_TBL ON A.ID = KEY_TBL.[KEY] 
[color=red]WHERE A.ID NOT IN (SELECT ID FROM @tempIdTable);[/color]


INSERT INTO @tempIdTable SELECT A.ID, KEY_TBL.[RANK] 
FROM dbo.Advert AS A INNER JOIN FREETEXTTABLE(dbo.AdvertsView_no, TextData, 'drive', LANGUAGE 'Norwegian') AS KEY_TBL ON A.ID = KEY_TBL.[KEY] 
[color=red]WHERE A.ID NOT IN (SELECT ID FROM @tempIdTable);[/color]

WITH B AS(
SELECT A.*, B.[RANK], ROW_NUMBER() OVER(ORDER BY [RANK] DESC) as RowNumber 
FROM Advert AS A INNER JOIN @tempIdTable AS B ON A.ID = B.ID WHERE (A.AdvertStateID = 3)
) 

SELECT * FROM B WHERE AdvertStateID = 3 AND (RowNumber BETWEEN 1 AND 11) ORDER BY [RANK] DESC, Title Asc;

красным выделил очень плохую часть запроса, которая убивает перфоманс мне, каким образом переделать, subquery() теперь тоже не канает особо... Что-то если я его в CTE использую не канает.
Та же проблема, в двух инсертах вставляются записи с одинаковыми айдишниками каким образом мне фильтровать повторяющиеся данные?
20 июн 11, 15:24    [10841087]     Ответить | Цитировать Сообщить модератору
 Re: Запрос с DISTINCT  [new]
overwriter
Member

Откуда:
Сообщений: 199
естественно ту часть которая перфоманс убивает - убираю
20 июн 11, 15:25    [10841092]     Ответить | Цитировать Сообщить модератору
Все форумы / Microsoft SQL Server Ответить