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
我想这是分区、结束等方面的问题,但我的sql知识在这方面缺乏:(

*编辑:*到目前为止我得到的查询:

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”)