【问题标题】:SQL : Check whether there is improvement of at least 1 level in the grade between multiple daysSQL : 检查多天之间的成绩是否有至少1级的提高
【发布时间】:2016-12-01 12:30:10
【问题描述】:

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

成绩数据将为 1,2,3,4

我需要的是,我需要检查学生从第 1 天到第 7 天的学习是否有任何进步。

如果说至少有一级改进,我需要将其归类为改进。以下是一些场景示例

场景 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 fiddle 中创建表格。

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 over 函数来获取前几行的值,但是我无法获得所需的输出。

非常感谢任何帮助。

【问题讨论】:

  • 如果学生从 1-4-2 出发怎么办?这是否代表改进。改进的定义不明确。
  • 这将被视为改进。我想看看至少有一次是否有改善。如果有改善然后下降没有问题。

标签: sql-server lookup


【解决方案1】:

如果你想知道成绩是否有任何下降,你可以使用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 之类的情况,而这对我来说似乎并没有太大的改进.

【讨论】:

  • 嗨,是的。但是,我不会在任何一天都需要改进。所以你的代码适合我。我只是将 case 语句更改为 case when db.Grade = db.prev_grade then '0' WHEN db.prev_grade IS NULL THEN '0' else '1' end 并且我能够得到我需要的东西。感谢您的帮助。
猜你喜欢
  • 1970-01-01
  • 2021-05-17
  • 1970-01-01
  • 2022-06-13
  • 2016-10-28
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多