[英]Taking a value considering the most recently amended date
I have the following columns where I need to take the most updated ID considering the most recent date an amendment has been made.考虑到最近的修改日期,我需要在以下列中获取最新的 ID。 For instance, I have used NVL(Updated_Date, Date) as Date, but am unsure of how to now take the ID that corresponds.
例如,我使用 NVL(Updated_Date, Date) 作为日期,但不确定现在如何获取对应的 ID。 The Code column is the one that I use to link to a separate table.
代码列是我用来链接到单独表格的列。
+--------------------------------------------+
| ID | DATE | UPDATED_DATE | CODE |
+--------------------------------------------+
| 123 | 1/2/2019 | | 987 |
| 456 | 1/1/2019 | 2/4/2019 | 654 |
| 789 | 1/1/2019 | | 654 |
+--------------------------------------------+
Ideally I would retrieve:理想情况下,我会检索:
+----------------+
| ID | CODE |
+----------------+
| 123 | 987 |
| 456 | 654 |
+----------------+
Many thanks in advance!提前谢谢了!
In Oracle, you can use aggregation and keep
:在 Oracle 中,您可以使用聚合并
keep
:
select code,
min(id) keep (dense_rank first_value order by updated_date desc nulls lat) as id
from t
group by code;
Assuming you want the first row for each CODE
which has the latest UPDATED_DATE
then you can use the ROW_NUMBER()
analytic function:假设您想要具有最新
UPDATED_DATE
的每个CODE
的第一行,那么您可以使用ROW_NUMBER()
分析 function:
Oracle Setup : Oracle 设置:
CREATE TABLE table_name ( ID, "DATE", UPDATED_DATE, CODE ) AS
SELECT 123, DATE '2019-02-01', NULL, 987 FROM DUAL UNION ALL
SELECT 456, DATE '2019-01-01', DATE '2019-04-02', 654 FROM DUAL UNION ALL
SELECT 789, DATE '2019-01-01', NULL, 654 FROM DUAL;
Query :查询:
SELECT ID, CODE
FROM (
SELECT t.*,
ROW_NUMBER()
OVER ( PARTITION BY code
ORDER BY UPDATED_DATE DESC NULLS LAST ) AS rn
FROM table_name t
)
WHERE rn = 1;
Output : Output :
ID |身份证 | CODE --: |
代码 --: | ---: 456 |
---: 456 | 654 123 |
654 123 | 987
987
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.