SQLite - GROUP BY行,仅当某些列与另一列匹配时

时间:2016-12-19 08:21:12

标签: sql sqlite

我正在构建一个计划应用程序,它使用我学校的预定义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 BYstart值等于具有相同ID的另一行时,我应该使用哪些查询仅end课程,以避免错误的时间?,我可以通过编程方式执行此操作,但我更喜欢用SQL做到这一点。

编辑:

我正在分组,因为我不想将每节课都显示为单独的一行,因为我的学校将每一课都定义为一行。

1 个答案:

答案 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