2016-12-01 6 views
0

私は学生番号、試験、評価のグレードと日数を持つトレーニング機関のデータを持っています。コンセプトは毎日(1日目〜7日目)の単一の研究であり、訓練が行われ、訓練の終わりにその研究の評価が行われます。 7日目以降、新しい研究が始まり、同じプロセスが実行されます。評価に基づいて、グレードが割り当てられます。SQL:複数日間の学年で少なくとも1レベルの改善があるかどうか確認してください

グレードのデータは、私は必要なもの1,2,3,4

になりますが、私は7

1日に1日目から研究の学生のためのいずれかの改善があるかどうかを確認する必要があり、

少なくとも1つのレベルの改善があるとすれば、改善として分類する必要があります。

研究1評価で学生1年生

1日目:3

2日目:3
3日目:2以下の例

シナリオ1のためのいくつかのシナリオであります
第4日2
第5日2
第6日2

7日目:2

日1

シナリオと比較すると、あなたは、学生が2日目の改善の1つのレベルを持っている以上のデータを確認した場合は2:

学生2で用グレード研究1評価

1日目:3

2日目:3

3日目:3

4日目:1

5日目:1

6日目:2

7日目:上記と同様に2

データは、3日目と比較して4日目に2レベルの改善を示す。

1日目〜7日目の改善レベルを調べる必要があります。改善がある場合は、改善されたとマークします。

1日目から7日目に改善が見られない場合は、Not Improvedとして分類する必要があります。

sql fiddleでテーブルを作成することができないため、refrence用のテーブルスクリプトを投稿しました。

CREATE TABLE [DataBook1](
 
\t [FolderName] [varchar](50) NULL, 
 
\t [Grade] [varchar](50) NULL, 
 
\t [InstituteCode] [varchar](50) NULL, 
 
\t [StudentNumber] [varchar](50) NULL, 
 
\t [StudyNo] [varchar](50) NULL 
 
) ON [PRIMARY] 
 

 
GO 
 
INSERT [DataBook1] ([FolderName], [Grade], [InstituteCode], [StudentNumber], [StudyNo]) VALUES (N'Day 6', N'1', N'80-02', N'80-02-001', N'Study 2') 
 
GO 
 
INSERT [DataBook1] ([FolderName], [Grade], [InstituteCode], [StudentNumber], [StudyNo]) VALUES (N'Day 1', N'1', N'80-02', N'80-02-001', N'Study 3') 
 
GO 
 
INSERT [DataBook1] ([FolderName], [Grade], [InstituteCode], [StudentNumber], [StudyNo]) VALUES (N'Day 2', N'1', N'80-02', N'80-02-001', N'Study 3') 
 
GO 
 
INSERT [DataBook1] ([FolderName], [Grade], [InstituteCode], [StudentNumber], [StudyNo]) VALUES (N'Day 3', N'1', N'80-02', N'80-02-001', N'Study 3') 
 
GO 
 
INSERT [DataBook1] ([FolderName], [Grade], [InstituteCode], [StudentNumber], [StudyNo]) VALUES (N'Day 4', N'1', N'80-02', N'80-02-001', N'Study 3') 
 
GO 
 
INSERT [DataBook1] ([FolderName], [Grade], [InstituteCode], [StudentNumber], [StudyNo]) VALUES (N'Day 5', N'1', N'80-02', N'80-02-001', N'Study 3') 
 
GO 
 
INSERT [DataBook1] ([FolderName], [Grade], [InstituteCode], [StudentNumber], [StudyNo]) VALUES (N'Day 6', N'1', N'80-02', N'80-02-001', N'Study 3') 
 
GO 
 
INSERT [DataBook1] ([FolderName], [Grade], [InstituteCode], [StudentNumber], [StudyNo]) VALUES (N'Day 4', N'1', N'80-02', N'80-02-001', N'Study 4') 
 
GO 
 
INSERT [DataBook1] ([FolderName], [Grade], [InstituteCode], [StudentNumber], [StudyNo]) VALUES (N'Day 5', N'1', N'80-02', N'80-02-001', N'Study 4') 
 
GO 
 
INSERT [DataBook1] ([FolderName], [Grade], [InstituteCode], [StudentNumber], [StudyNo]) VALUES (N'Day 6', N'1', N'80-02', N'80-02-001', N'Study 4') 
 
GO 
 
INSERT [DataBook1] ([FolderName], [Grade], [InstituteCode], [StudentNumber], [StudyNo]) VALUES (N'Day 1', N'2', N'80-02', N'80-02-001', N'Study 1') 
 
GO 
 
INSERT [DataBook1] ([FolderName], [Grade], [InstituteCode], [StudentNumber], [StudyNo]) VALUES (N'Day 2', N'2', N'80-02', N'80-02-001', N'Study 1') 
 
GO 
 
INSERT [DataBook1] ([FolderName], [Grade], [InstituteCode], [StudentNumber], [StudyNo]) VALUES (N'Day 3', N'2', N'80-02', N'80-02-001', N'Study 1') 
 
GO 
 
INSERT [DataBook1] ([FolderName], [Grade], [InstituteCode], [StudentNumber], [StudyNo]) VALUES (N'Day 4', N'2', N'80-02', N'80-02-001', N'Study 1') 
 
GO 
 
INSERT [DataBook1] ([FolderName], [Grade], [InstituteCode], [StudentNumber], [StudyNo]) VALUES (N'Day 5', N'2', N'80-02', N'80-02-001', N'Study 1') 
 
GO 
 
INSERT [DataBook1] ([FolderName], [Grade], [InstituteCode], [StudentNumber], [StudyNo]) VALUES (N'Day 6', N'2', N'80-02', N'80-02-001', N'Study 1') 
 
GO 
 
INSERT [DataBook1] ([FolderName], [Grade], [InstituteCode], [StudentNumber], [StudyNo]) VALUES (N'Day 2', N'2', N'80-02', N'80-02-001', N'Study 2') 
 
GO 
 
INSERT [DataBook1] ([FolderName], [Grade], [InstituteCode], [StudentNumber], [StudyNo]) VALUES (N'Day 3', N'2', N'80-02', N'80-02-001', N'Study 2') 
 
GO 
 
INSERT [DataBook1] ([FolderName], [Grade], [InstituteCode], [StudentNumber], [StudyNo]) VALUES (N'Day 4', N'2', N'80-02', N'80-02-001', N'Study 2') 
 
GO 
 
INSERT [DataBook1] ([FolderName], [Grade], [InstituteCode], [StudentNumber], [StudyNo]) VALUES (N'Day 5', N'2', N'80-02', N'80-02-001', N'Study 2') 
 
GO 
 
INSERT [DataBook1] ([FolderName], [Grade], [InstituteCode], [StudentNumber], [StudyNo]) VALUES (N'Day 7', N'2', N'80-02', N'80-02-001', N'Study 2') 
 
GO 
 
INSERT [DataBook1] ([FolderName], [Grade], [InstituteCode], [StudentNumber], [StudyNo]) VALUES (N'Day 7', N'2', N'80-02', N'80-02-001', N'Study 3') 
 
GO 
 
INSERT [DataBook1] ([FolderName], [Grade], [InstituteCode], [StudentNumber], [StudyNo]) VALUES (N'Day 1', N'2', N'80-02', N'80-02-001', N'Study 4') 
 
GO 
 
INSERT [DataBook1] ([FolderName], [Grade], [InstituteCode], [StudentNumber], [StudyNo]) VALUES (N'Day 2', N'2', N'80-02', N'80-02-001', N'Study 4') 
 
GO 
 
INSERT [DataBook1] ([FolderName], [Grade], [InstituteCode], [StudentNumber], [StudyNo]) VALUES (N'Day 3', N'2', N'80-02', N'80-02-001', N'Study 4') 
 
GO 
 
INSERT [DataBook1] ([FolderName], [Grade], [InstituteCode], [StudentNumber], [StudyNo]) VALUES (N'Day 7', N'2', N'80-02', N'80-02-001', N'Study 4') 
 
GO 
 
INSERT [DataBook1] ([FolderName], [Grade], [InstituteCode], [StudentNumber], [StudyNo]) VALUES (N'Day 7', N'3', N'80-02', N'80-02-001', N'Study 1') 
 
GO 
 
INSERT [DataBook1] ([FolderName], [Grade], [InstituteCode], [StudentNumber], [StudyNo]) VALUES (N'Day 1', N'3', N'80-02', N'80-02-001', N'Study 2') 
 
GO

私は自分の所望の出力を得ることができませんでしたが、前の行の値を取得するために、機能上ROW_NUMBERを使用しようとしました。

ご協力いただきまして誠にありがとうございます。

+1

生徒が1-4-2の場合はどうなりますか?それは改善かどうかを表していますか?改善の定義は明確ではない。 –

+0

改善と見なされます。私は少なくとも一度は改善があるかどうかを見たいと思う。改善がある場合、それは問題をまったく浸しません。 –

答えて

0

あなたは学年でどの減少があるかどうかを知りたい場合は、あなたがlag()を使用することができます。

select StudentNumber, 
     (case when sum(case when grade < prev_grade then 1 else 0 end) 
      then 'Improvement' 
      else 'No Improvement' 
     end) as flag 
from (select db.*, 
      lag(grade) over (partition by StudentNumber order by FolderName) as prev_grade 
     from DataBook1 db 
    ) db 
group by StudentNumber; 

あなたが持っている可能性があるため、しかし、私は、これは改善の良い指標であるとは思いません2-2-2-2-2-3-2のような状況では、それは私にとってはあまり改善されていないようです。

+0

こんにちは、はい。しかし、私はいつでも改善が必要ではないでしょう。だからあなたのコードは私に合っています。私は念のためにcase文を変更したときにdb.Grade = は、 '0' \t \t \t db.prev_gradeがNULL IS はTHEN '0' 他に '1' エンドは、私は何を取得することができていますdb.prev_grade I必要。ご協力いただきありがとうございます。 –

関連する問題