假设我在Oracle数据库中有一个表“ TABLE_A”:
=======================
| id | key | date |
=======================
| 0 | 1 | 1.1.2020 |
| 1 | 1 | 1.1.2021 |
=======================
我想得到这样的结果:
===================================
| id | key | date | next_date |
===================================
| 0 | 1 | 1.1.2020 | 1.1.2021 |
===================================
请注意,我希望在<ID>
特定日期<DATE>
具有特定键的行与包含相同键的数据库中包含下一个日期的另一列。但是,如果没有其他日期,则仍应给我相同的行,但next_date为空。
有没有比这更简单/更好/更易读的版本?
SELECT a.*, next_date
FROM TABLE_A a,
(SELECT key, date as next_date
FROM TABLE_A
WHERE key = <ID>
AND date > <DATE>
AND ROWNUM <= 1
ORDER BY next_date asc) a2
WHERE key = <ID>
AND date = <DATE>
AND a2.key(+) = a.key
尽管lead()
您正在描述,但我认为相关子查询可能是最快的:
select t.*,
(select min(t2.date)
from t t2
where t2.key = t.key and t2.date > t.date
) as next_date
from t;
(您可以为特定键添加过滤器。)
特别是,这可以非常有效地使用上的索引(key, date)
。
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句