【发布时间】:2023-03-07 23:39:01
【问题描述】:
场景:一家公司在许多州有许多分支机构。一个州可能有多个分支。每当员工从一个分支转移到另一个分支时,都会在如下表中输入一个条目
| EID | DT | BRANCH | STATE |
|-----|-------------|--------|-------|
| 1 | 01-JAN-2000 | A | AA |
| 1 | 01-JAN-2001 | B | AA |
| 1 | 01-JAN-2002 | C | AA |
| 1 | 01-JAN-2003 | D | AA |
| 1 | 01-JAN-2004 | E | BB |
| 1 | 01-JAN-2005 | F | BB |
| 1 | 01-JAN-2006 | G | BB |
| 1 | 01-JAN-2007 | H | BB |
| 1 | 01-JAN-2008 | A | AA |
| 1 | 01-JAN-2009 | B | AA |
| 1 | 01-JAN-2010 | C | AA |
| 1 | 01-JAN-2011 | D | AA |
要求是找出员工处于某种状态的持续时间。输出应该是这样的
| STATE | MIN | MAX | Duration |
|-------|-------------|-------------|-------------|
| AA | 01-JAN-2000 | 01-JAN-2003 | 3 |
| BB | 01-JAN-2004 | 01-JAN-2007 | 3 |
| AA | 01-JAN-2008 | 01-JAN-2011 | 3 |
我似乎无法弄清楚如何在 PL/SQL 中做到这一点。漫长的方法是使用 for 循环遍历每一行并找到持续时间。但是有没有办法在不使用循环的情况下在 PLSQL 中做到这一点?
这是一个 SQLFiddle Demo
【问题讨论】:
-
Duration是日期之间的年差,还是别的什么? -
是的,最小最大年数之间的差异。但如果我们能得到 min max,那么找到持续时间并不是什么大问题
-
为什么要存储过程?