Запрос с DISTINCT

overwriter
Дата: 15.06.2011 19:11:28
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 как избавиться?
stimpi
Дата: 15.06.2011 19:31:38
subquery
overwriter
Дата: 16.06.2011 10:48:26
stimpi,

вот, да и беру максимальное значение в subquery) подходит в целом, спасибо)
overwriter
Дата: 20.06.2011 15:24:55
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 использую не канает.
Та же проблема, в двух инсертах вставляются записи с одинаковыми айдишниками каким образом мне фильтровать повторяющиеся данные?
overwriter
Дата: 20.06.2011 15:25:41
естественно ту часть которая перфоманс убивает - убираю