2015-12-11 3 views
0

У меня есть таблица со следующими столбцами и выборочных данных, где ItemID уникален:SQL Server 2012, как получить порядковый номер конкретной записи

ID User ItemID  ExpiryDate 
    1 John A13534  2015-12-24 
    3 Mark B14532  2015-12-13 
....... 
12415 John B43245  2012-12-30 
....... 
75741 John C14542  2012-12-22 
....... 

Фильтры являются:

WHERE User = 'John' 
    AND ExpiryDate > getDate() 
    ORDER BY 
     ExpiryDate DESC 

Учитывая, что ItemID уникально, мне нужно найти, если itemID = B43245 относится к числу первых 1000 выбранных товаров или нет

Я попытался написать решение как с Row_Number и RANK, но я не понимаю, куда поставить фильтр ItemID :-(

Учитывая, что таблица содержит более чем 100.000 пунктов, пожалуйста, вы можете предложить решение, которое не слишком тяжелый?

Спасибо!

+0

Какой порядок вы пытаетесь получить в своих записях? – Szymon

+0

Извините забыл о том, что установлен Порядок по заказу .. только что добавил – Joe

ответ

1

Вы можете просто получить 1000 лучших записей, а затем получить свой идентификатор. Если вы получаете запись, этот идентификатор находится в верхней 1000. Если вы этого не сделаете, это не так. Или вы можете изменить внешний выбор на счет, если хотите.

select * from 
(
    select top 1000 ID 
    from yourtable 
    WHERE User='John' AND ExpiryDate > getDate() 
    ORDER BY ExpiryDate DESC 
) x 
where id = 'B43245' 
+1

Привет! Спасибо за ответ .. ну .. это может сработать .. начнется сразу, чтобы сделать некоторые тесты .... Я имею в виду .. так как это только одна часть запроса, и у меня уже есть 2 вложенных выделения, я бы предпочел одно решение для выбора ... но, возможно, я могу упростить его. – Joe

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