2009-12-15 3 views
0

Использование SQL Server 2008, но может быть связано и с другими базами данных.Как найти индекс записи с SQL или хранимой процедурой?

Если бы я имел следующие данные (таблица т):

id text date 
1 Data1 2/1/2009 
2 Data2 2/2/2009 
3 Data3 2/3/2009 
4 Data4 2/4/2009 
5 Data5 2/5/2009 

Как я мог найти индекс определенной записи?

IndexOf (выбрать идентификатор из т, где ID = 1) = 0

или

IndexOf (выбрать идентификатор из т, где дата = '2/4/2009') = 3

Я думаю, что это что-то делать с row_number(), но не совсем уверен ...

+0

Когда вы говорите, «IndexOf» вы имеете в виду, когда он появляется в результирующем? –

+0

Что вы надеетесь сделать с индексом? –

+0

Да, по сути, у меня есть значение, когда человек последний раз просматривал тему форума. Оттуда я хочу, чтобы затем выбрать диапазон от того, когда он последний раз просматривался до следующих 20 или около того сообщений. – rball

ответ

2

Да, ROW_NUMBER - это именно то, что вы хотите использовать вместе с предложением OVER. Вы можете сделать то, что вы пытаетесь сделать с помощью вложенного запроса или CTE, такие как это:

;WITH Q as (
    SELECT id, text, date, ROW_NUMBER() OVER (ORDER BY date) as RowNumber 
    FROM t 
) 
SELECT * FROM Q WHERE RowNumber = 3 
+0

Выглядит довольно легко, я дам ему вихрь. – rball

+0

Я думаю, что мне просто не нужны детали с Q Q, но это сделало трюк. PS также был прав, но оставил «RowNumber», который, я думаю, переименую в «Индекс». Но вроде общий ответ ... :) – rball

+0

Yep ps сделал тот же w/sub-query ... Я почему-то тяготел к CTE больше в эти дни. Более читаемый мне :) –

1

Edit
выберите * от (выберите ROW_NUMBER() над (заказ по идентификатору) -1, как индекс, * из таблицы) а где - условие

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