如何用 pl/sql 中的最大和最小日期替换多行数据的开始日期和结束日期
How to replace start date and end date for multiple row data with the maximum and minimum of date in pl/sql
我有一个具有唯一开始日期和结束日期组合的多行数据。
我想用所有开始日期中的最小日期替换开始日期
和结束日期为所有结束日期中的最大值。
示例:
id start Date end Date
1005 09/01/2000 05/31/2001
1005 09/05/2000 05/23/2001
100775 03/15/2005 04/30/2005
100775 03/25/2005 04/22/2005
3273 09/01/2003 12/31/2004
3273 09/11/2003 12/11/2004
现在我希望输出如下所示:
id start Date end date
1005 09/01/2000 05/31/2001
1005 09/01/2000 05/31/2001
100775 03/15/2005 04/30/2005
100775 03/15/2005 04/30/2005
3273 09/01/2003 12/31/2004
3273 09/01/2003 12/31/2004
我已经尝试使用 max
和 min
函数来执行此操作,但这不起作用,因为我希望这只是在 oracle 报表生成器中使用它的一个查询。
您只需使用 min
和 max
函数即可获得所需的输出:
select
id,
min(start_date) OVER (PARTITION BY id) start_date,
max(end_date) OVER (PARTITION BY id) end_date
FROM table1;
另一种方法,
UPDATE T1 SET StartDate = MinStartDate, EndDate = MaxEndDate
FROM (
Select id, min(StartDate) as 'MinStartDate',
Max(EndDate) as 'MaxEndDate'
from T1
Group by id
) AS T2
WHERE T1.id = T2.id;
我有一个具有唯一开始日期和结束日期组合的多行数据。
我想用所有开始日期中的最小日期替换开始日期 和结束日期为所有结束日期中的最大值。
示例:
id start Date end Date
1005 09/01/2000 05/31/2001
1005 09/05/2000 05/23/2001
100775 03/15/2005 04/30/2005
100775 03/25/2005 04/22/2005
3273 09/01/2003 12/31/2004
3273 09/11/2003 12/11/2004
现在我希望输出如下所示:
id start Date end date
1005 09/01/2000 05/31/2001
1005 09/01/2000 05/31/2001
100775 03/15/2005 04/30/2005
100775 03/15/2005 04/30/2005
3273 09/01/2003 12/31/2004
3273 09/01/2003 12/31/2004
我已经尝试使用 max
和 min
函数来执行此操作,但这不起作用,因为我希望这只是在 oracle 报表生成器中使用它的一个查询。
您只需使用 min
和 max
函数即可获得所需的输出:
select
id,
min(start_date) OVER (PARTITION BY id) start_date,
max(end_date) OVER (PARTITION BY id) end_date
FROM table1;
另一种方法,
UPDATE T1 SET StartDate = MinStartDate, EndDate = MaxEndDate
FROM (
Select id, min(StartDate) as 'MinStartDate',
Max(EndDate) as 'MaxEndDate'
from T1
Group by id
) AS T2
WHERE T1.id = T2.id;