我正在构建一个计划应用程序,它使用我学校的预定义API。每节课都会在一行中宣布每小时的次数。一个简短的例子:
表课:
Subject Id Start End
English 111 09:30 10:30
English 111 10:30 11:30
Dutch 120 12:30 13:30
Java 109 14:30 15:30
English 111 15:30 16:30
要检索课程,并在我的应用程序中显示它们,我使用以下查询:
SELECT MIN(start), MAX(end) FROM lessons ORDER BY Start GROUP BY Id
它工作得很好,但是当一个学生在一天中具有相同Id的相同的两个课程时,在这种情况下English
,SQL查询将显示为:
English 09:30 - 16:30
在这种情况下,我们遇到了问题,因为英语不需要6个小时,我想将其显示为:
English 09:30 - 11:30
English 15:30 - 16:30
所以我的问题是:
当GROUP BY
或start
值等于具有相同ID的另一行时,我应该使用哪些查询仅end
课程,以避免错误的时间?,我可以通过编程方式执行此操作,但我更喜欢用SQL做到这一点。
编辑:
我正在分组,因为我不想将每节课都显示为单独的一行,因为我的学校将每一课都定义为一行。
答案 0 :(得分:1)
这将完成工作
doInBackground
with cte as
(
select subject,id,start,end
from mytable t
where not exists
(
select null
from mytable t2
where t2.id = t.id
and t2.end = t.start
)
union all
select t.subject,t.id,cte.start,t.end
from cte
join mytable t
on t.id = cte.id
and t.start = cte.end
)
select subject,id,start,max(end) as end
from cte
group by subject,id,start