Как указать критерии соответствия первых N строк? - PullRequest
0 голосов
/ 28 февраля 2012

Я использую SSMS 2008, и я создал набор данных со sproc, который возвращает много записей.Однако существует столбец даты, который может иметь то же значение в этом наборе данных.Теперь я хочу отфильтровать эти записи, чтобы они включали только самые последние данные из этого набора данных.Как мне сделать это в T-SQL?(Я хочу видеть только 2/5 записей ниже).

Например:

col A     col B     col C
AAAAAA    BBBBBB    2/5/2012
AAAAA2    BBBBB2    2/5/2012
AAAAA3    BBBBB3    2/1/2012
AAAAA4    BBBBB4    1/25/2012
AAAAA5    BBBBB5    1/25/2012
AAAAA6    BBBBB6    1/10/2012

Я попробовал ваш solutoin Andreas, но сейчас получаю ошибку:

Сообщение 102, уровень 15, состояние 1, строка 74 Неверный синтаксис рядом с ')'.

Вот фрагмент кода:

select *
from (
    select *, row_number() over(partition by [test_details_answers_expanded_view].[actual_date] 
    order by [test_details_answers_expanded_view].[actual_date] desc) rowno
    from 
    (
Select
    [test_details_answers_expanded_view].[event_log_id],
...
[test_details_answers_expanded_view].[actual_date],
...
FROM #TEMP_EVENT_LOG A  
JOIN [evolv_reports].[dbo].[test_header_rv] ON A.[event_log_id] = [test_header_rv].[event_log_id]
CROSS APPLY [dbo].[fn_getTestSetupFormDetails](null, [test_header_rv].[test_setup_header_id]) AS [test_header]
CROSS APPLY [dbo].[fn_getTestSetupFormDetails]([test_header].[test_setup_details_id], null) AS [test_details]
JOIN [evolv_reports].[dbo].[test_details_answers_expanded_view] ON
        [test_header_rv].[test_header_id] = [test_details_answers_expanded_view].[test_header_id]
    AND [test_details].[test_setup_details_id] = [test_details_answers_expanded_view].[test_setup_details_id]
Where  
(@TestHeaderCode Is Null OR [test_header].[test_header_code] = @TestHeaderCode)
   AND (@TestHeaderID Is Null OR [test_header_rv].[test_header_id] = @TestHeaderID)
) t
where rowno = 1

Можете ли вы сказатьчто я тут не так сделал?

1 Ответ

0 голосов
/ 28 февраля 2012

Вот пример использования row_number:

select *
from (
    select *, row_number() over(partition by [col c] order by [col c] desc) rowno
    from table
) t
where rowno = 1
...