2016-05-03 7 views
3

私は、ストアドプロシージャに次のコードセグメントを持っている:SQL - 最初のレコードのみを

where 
((Question = 'SurgicalSectionCompleted' and ChangeTo = 'True') or 
(Question = 'MedicalSectionCompleted' and ChangeTo = 'True')) 

しかし、時には問題の表に、ChangeToはtrueになります複数のエントリが存在します。 ChangeToがTrueのFIRSTレコードに基づいてのみ計算することが不可欠です。どのようなSQLコマンドを使ってこれを行うことができますか?何か案は?ありがとう。

テーブルに記録されたフィールドは、次のとおりです。あなたが唯一の1行が返された場合、ID、名前、personNo、entryTime、質問、changeFrom、ChangeTo

+3

"第一" 何で順序付けられましたか? –

+0

作成日(例:ボブは質問が 'MedicalSectionCompleted'&ChangeToが 'True'だった複数の行を持つことができました。しかし、私はBobがこれを行った最初の行で計算をしたいだけです。 – SamFarr

答えて

1

TOP 1を使用し、その後、TOP 1

select TOP 1 * 
from table1 
where 
((Question = 'SurgicalSectionCompleted' and ChangeTo = 'True') or 
(Question = 'MedicalSectionCompleted' and ChangeTo = 'True')) 
order by <col1> 
10

を使用します。最初の場合は、ORDER BYを使用する:あなたは一人一人のために最初にしたい場合

select top 1 t.* 
from t 
where Question in ('SurgicalSectionCompleted', 'MedicalSectionCompleted') and 
     ChangeTo = 'True' 
order by entryTime asc; 

、その後、row_number()を使用します。

select t.* 
from (select t.*, 
      row_number() over (partition by personNo order by entryTime) as seqnum 
     from t 
     where Question in ('SurgicalSectionCompleted', 'MedicalSectionCompleted') and 
      ChangeTo = 'True' 
    ) t 
where seqnum = 1; 
関連する問題