下表存储了一对多关系,其中一个用户可能与一个或多个配置文件相关联:
+----+---------+------------+------------------------+
| ID | USER_ID | PROFILE_ID | LAST_PROFILE_DATE_TIME |
+----+---------+------------+------------------------+
| 1 | 100 | 101 | 04.06.23 08:35:19.5393 |
| 2 | 100 | 102 | 05.06.23 08:35:19.5393 |
+----+---------+------------+------------------------+
如何获取用户100
的最新配置文件?下面是预期的结果:
+------------+
| PROFILE_ID |
+------------+
| 102 |
+------------+
我需要一个单一的值来更新另一个表中的字段。
这是我的尝试。。但问题是我得到了两行,因为GROUP BY
子句需要除了MAX
之外的所有字段:
SELECT up.PROFILE_ID
FROM
(SELECT USER_ID, PROFILE_ID, MAX(LAST_PROFILE_DATE_TIME)
FROM USER_PROFILE
GROUP BY USER_ID, PROFILE_ID) up
WHERE up.USER_ID = 100;
我需要在Oracle和PostgreSQL上运行查询。任何帮助都将不胜感激。
2条答案
按热度按时间vnjpjtjt1#
您可以按以下方式执行此操作:
首先获取每个USER_ID的最新LAST_PROFILE_DATE_TIME:
然后将此数据集连接到表以获取PROFILE_ID:
knpiaxh12#
你可以使用
ROW_NUMBER
解析函数:或者两个数据库都支持
FETCH FIRST ROW ONLY
语法:其中,对于样本数据:
两个输出:
| 配置文件ID| last_profile_date_time|
| - -----|- -----|
| 一百零二|2023-06-05 08:35:19.5393|
PostgreSQL fiddleOracle fiddle