2014-12-04 30 views
0

,而不是最後價值2008

 MAX(survey_questions.question_type) as question_type 

我想是這樣

 LAST (survey_questions.survey_id) survey_questions.question_type as question_type 

我的表survey_questions具有的各種調查問題清單。 survey_id越高,最近的問題 - 我們就調查的各種迭代,有時問題類型的變化(下拉,文本等)保留一個問題措辭的列表。這個問題是在這種方式創建

select report_survey_questions.report_id, 
     report_survey_questions.report_question_number, 
     MAX(survey_questions.question_type) as question_type, 
     MAX(CAST(survey_questions.client_provided_data_id as int)) as client_provided_data_id 
    from report_survey_questions, 
     survey_questions 
    where report_survey_questions.survey_id = survey_questions.survey_id 
     and report_survey_questions.question_id = survey_questions.question_id 
    group by report_survey_questions.report_id, 
     report_survey_questions.report_question_number 

所以,我怎麼能代替MAX獲得最後一個(即最高survey_id)我的「看法」,保持所有其他部分。

+0

MIN()是否工作? – 2014-12-04 17:20:39

+0

不,相反的問題。 – 2014-12-04 17:25:07

+0

你的數據結構對我來說不太清楚,你能否提供示例數據/輸入和期望輸出? – 2014-12-04 17:27:10

回答

0

假設「最後」/「最高」survey_id是每question_id,以下應該工作。或者,如果分組基於另一個字段(question_type也許?),只需更改PARTITION BY子句中的字段名稱即可。

;WITH cte AS 
(
    SELECT sq.question_type, 
     sq.client_provided_data_id, 
     sq.survey_id, 
     sq.question_id, 
     ROW_NUMBER() OVER (PARTITION BY sq.question_id ORDER BY sq.survey_id DESC) 
       AS [RowNum] 
    FROM survey_questions sq 
) 
SELECT rsq.report_id, 
     rsq.report_question_number, 
     cte.question_type, 
     CAST(cte.client_provided_data_id AS INT) AS [client_provided_data_id] 
FROM report_survey_questions rsq 
INNER JOIN cte 
     ON cte.survey_id = rsq.survey_id 
     AND cte.question_id = rsq.question_id 
     AND cte.[RowNum] = 1;