SQL:检查在几天之间,等级中至少有1个级别的改善

  • 本文关键字:1个 之间 几天 SQL sql-server lookup
  • 更新时间 :
  • 英文 :


我有一个培训机构的数据,其中我将拥有学生人数,学习,评估年级和天数。该概念是每天(第1天到第7天)进行一次研究,将进行培训,在培训结束时,我们将对该研究进行评估。第7天后,将开始进行一项新的研究,并进行相同的过程。根据评估,将分配一个等级。

等级数据将为1,2,3,4

我需要的是,我需要检查研究中的学生是否有任何改进。

如果至少有一个改进的说法,我需要将其分类为改进。以下是几个场景,例如

方案1:

研究中的学生1等级1评估

第1天:3

第2天:3
第3天:2
第4天:2
第5天:2
第6天:2

第7天:2

如果您检查上述数据,与第1天相比,学生在第2天的改进水平

方案2:

研究中的学生2等级1评估

第1天:3

第2天:3

第3天:3

第4天:1

第5天:1

第6天:2

第7天:2

与第3天相比,在上述数据中,学生在第4天有两个改进水平

因此,我需要找出第1天到第7天的改进水平,如果有进步,我会将学生标记为改进。

如果从第1天到第7天没有任何改进,则必须将其归类为没有改进。

我已经在SQL小提琴中创建表。

CREATE TABLE [DataBook1](
	[FolderName] [varchar](50) NULL,
	[Grade] [varchar](50) NULL,
	[InstituteCode] [varchar](50) NULL,
	[StudentNumber] [varchar](50) NULL,
	[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上的函数来获取前行的值,但是我无法获得所需的输出。

任何帮助都将受到高度赞赏。

如果您想知道等级是否有,则可以使用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-2-3-2之类的情况,而且这对我来说似乎并没有太大的进步。

最新更新