gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-12-03 17:57:06 24 4
gpt4 key购买 nike

我正在构建一个日程应用程序,它使用我学校的预定义 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

要检索类(class)并在我的应用程序中显示它们,我使用以下查询:
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上课时 startend值等于具有相同 id 的另一行,以避免错误时间?,我可以通过编程方式执行此操作,但我更喜欢使用 SQL 执行此操作。

编辑:

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

最佳答案

这将完成这项工作

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
+---------+-----+-------+-------+
| subject | id | start | end |
+---------+-----+-------+-------+
| Dutch | 120 | 12:30 | 13:30 |
+---------+-----+-------+-------+
| English | 111 | 09:30 | 11:30 |
+---------+-----+-------+-------+
| English | 111 | 15:30 | 16:30 |
+---------+-----+-------+-------+
| Java | 109 | 14:30 | 15:30 |
+---------+-----+-------+-------+

关于SQLite - GROUP BY 行,仅当某些列与另一列匹配时,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41218398/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com