Azure sql database sql统计一天中的连续周期数
给出下表Azure sql database sql统计一天中的连续周期数,azure-sql-database,Azure Sql Database,给出下表 ID Teacher lessondate period Group Course Room Lnr Count 167 teacher 1 2013-12-02 08:30:00.000 1 group 1 NE room 1 223 1 168 teacher 1 2013-12-02 09:15:00.000 2 group 1 NE room 1 224
ID Teacher lessondate period Group Course Room Lnr Count
167 teacher 1 2013-12-02 08:30:00.000 1 group 1 NE room 1 223 1
168 teacher 1 2013-12-02 09:15:00.000 2 group 1 NE room 1 224 1
169 teacher 1 2013-12-02 10:00:00.000 3 group 1 ENG room 1 226 1
170 teacher 1 2013-12-02 11:00:00.000 4 group 1 VAKT room 1 228 1
171 teacher 1 2013-12-02 11:45:00.000 5 group 1 DGV room 1 227 1
172 teacher 1 2013-12-02 13:00:00.000 6 group 1 VAKT room 1 228 1
183 teacher 1 2013-12-05 08:30:00.000 1 group 1 VAKT room 2 228 1
184 teacher 1 2013-12-05 09:15:00.000 2 group 1 NE room 2 223 2
185 teacher 1 2013-12-05 10:00:00.000 3 group 1 NE room 2 223 2
186 teacher 1 2013-12-05 11:00:00.000 4 group 1 LB room 1 222 2
187 teacher 1 2013-12-05 11:45:00.000 5 group 1 LB room 1 222 2
188 teacher 1 2013-12-05 13:00:00.000 6 group 1 REK room 1 225 1
189 teacher 1 2013-12-06 14:45:00.000 8 group 2 AAA 4 3
190 teacher 1 2013-12-06 15:30:00.000 9 group 2 AAA 4 3
191 teacher 1 2013-12-06 16:15:00.000 10 group 2 AAA 4 3
我想在SQL中生成count列,条件如下:
如果周期在同一天且连续(在周期上),且课程编号(lnr)相等,则计数大于1
数据解释:
- 167和168:同一天,连续期间,课数不相等=>count=1
- 170和172:同一天,同一课时,时段不连续=>count=1
- 184和185:同一天,同一课数,连续时间=>count=2
- 189190191:同一天,同一课号,连续时间=>count=3
select distinct a.*, blockHours
from timetablerecords a
join (
select distinct lessonnumber, convert(date,c.lessonDate) ld, count(distinct period) blockHours
from timetablerecords c
where teacher='teacher 1'
group by convert(date,c.lessonDate), c.lessonnumber, c.course
) b
on a.lessonNumber=b.lessonnumber and convert(date,a.lessonDate)= b.ld
where teacher='teacher 1'
order by lessondate,period
这不考虑不连续(或者是不连续?)的时段。对于上面的数据,对于id的170和172,它返回count=2
查询在MS SQL Azure数据库上运行
输出应包含表中提到的所有列。上面未显示但也应包含在结果中的唯一列是“duration”
可以使用以下脚本创建该表:
CREATE TABLE [dbo].[timetablerecords](
[Id] [int] IDENTITY(1,1) NOT NULL,
[teacher] [nvarchar](255) NOT NULL,
[lessonDate] [datetime] NOT NULL,
[period] [int] NOT NULL,
[group] [nvarchar](255) NOT NULL,
[course] [nvarchar](255) NOT NULL,
[room] [nvarchar](255) NOT NULL,
[lessonNumber] [nvarchar](255) NOT NULL,
[lessonDuration] [int] NOT NULL,
[locationCode] [nvarchar](255) NOT NULL)
那么,到目前为止,您得到了什么?这将有助于解释您的一些逻辑,并告诉我们您需要哪些列。此外,请包括一个实际的“结果表”,以及您想要的输出。SQL的“风格”是什么,特别是作为窗口函数(其中
按分区
是其中的一部分)没有得到普遍支持。@Clockwork Muse:只剩下很少的DBMS不支持窗口功能。@Clockwork Muse:我已经编辑了问题,添加了迄今为止得到的qeury并描述了表格。好的,想要的结果是什么?@Clockwork Muse:想要的结果=表格中提到的列以count列结尾(id、教师、课时日期、期间、[组]、课程、房间、课时编号、课时长度、地点代码、[计数])我将计数命名为“blockHours”)