我有这张桌子:
+----+------------+-----------+
| ID | VALID_FROM | VALID_TO |
+----+------------+-----------+
| A | 28-JUN-19 | 28-JUN-19 |
+----+------------+-----------+
| A | 28-JUN-19 | 29-JUN-19 | //penultimo de A
+----+------------+-----------+
| A | 28-JUN-19 | 30-JUN-19 | //ultimo de A
+----+------------+-----------+
| B | 28-JUN-19 | 30-JUN-19 | // lo ignoramos
+----+------------+-----------+
| C | 27-JUN-19 | 28-JUN-19 |
+----+------------+-----------+
| C | 28-JUN-19 | 28-JUN-19 |
+----+------------+-----------+
| C | 28-JUN-19 | 29-JUN-19 |
+----+------------+-----------+
| C | 29-JUN-19 | 30-JUN-19 | //penultimo de C
+----+------------+-----------+
| C | 29-JUN-19 | 01-JUL-19 | //ultimo de C
+----+------------+-----------+
我需要一个查询,对于每个当前组A,B,C
返回我组的VALID_FROM
最后一个元素VALID_TO
大于同一组的倒数第二个元素的记录。
如果一个组只有一行,则不进行比较(如 B 的情况)。
我创建的查询是这样的:
SELECT *
FROM
myTabla g1
INNER JOIN
myTabla g2 ON g2.valid_from > g1.valid_to
WHERE
g1.ID = g2.ID;
我不知道逻辑是否正确,也不知道如何只在每组的最后一个和倒数第二个之间进行比较。
要通过 [ID] 获取最后一条和倒数第二条记录,需要一个字段来对它们进行排序,在这种情况下,使用带有连续数字的 [N_REGISTRATION] 列,它也可以是一个日期时间字段。
在查询示例中,没有符合请求条件的记录,因此在此响应的示例数据中输入了组“D”。