【问题标题】:Combine records to show start date and end date SQL合并记录以显示开始日期和结束日期 SQL
【发布时间】:2021-05-16 08:23:34
【问题描述】:

只是需要一些帮助来解决我遇到的问题。

基本上,我下面有一组数据示例:

+----------+------------+-----------+  
| Class ID | Start date | End date  |  
+----------+------------+-----------+  
|    12345 | 1-Jan-21   | 2-Jan-21  |  
|    12345 | 3-Jan-21   | 4-Jan-21  |  
|    12345 | 5-Jan-21   | 6-Jan-21  |  
|    12345 | 7-Jan-21   | 8-Jan-21  |  
|    67890 | 17-Jan-21  | 25-Jan-21 |  
|    67890 | 25-Jan-21  | 26-Jan-21 |  
|    67890 | 26-Jan-21  | 31-Jan-21 |  
+----------+------------+-----------+  

我想将具有相同班级 ID 的行分组,但仅在一行上显示最短开始日期和最长结束日期。如下表:

+----------+------------+-----------+  
| Class ID | Start Date | End Date  |   
+----------+------------+-----------+  
|    12345 | 1-Jan-21   | 8-Jan-21  |  
|    67890 | 17-Jan-21  | 31-Jan-21 |  
+----------+------------+-----------+  

如何查询?

谢谢!

【问题讨论】:

  • 如果你有相同的类 id 但有差距怎么办,例如2021 年 1 月 11 日至 18 日再排一排?你还会在输出中保留一行还是两行?

标签: sql oracle11g oracle10g


【解决方案1】:

你可以使用聚合:

select class_id, min(start_date), max(end_date)
from t
group by class_id;

【讨论】: