SQL-连接3个表并根据id选择最新记录的条目
我有一个相当复杂的谜语要解。到目前为止,我还不确定 我有3个表,我需要加入以获得结果 最重要的是我需要最高的SQL-连接3个表并根据id选择最新记录的条目,sql,oracle,join,max,Sql,Oracle,Join,Max,我有一个相当复杂的谜语要解。到目前为止,我还不确定 我有3个表,我需要加入以获得结果 最重要的是我需要最高的h\u idperp\u idh_id是日志历史记录中的uniqe条目。我需要给定点的最新一个(p\u id->num) 除此之外,我还需要ext和name 历史记录在Oracle中,您可以使用保留: +----------------+---------+--------+ | h_id | p_id | str_id | +----------------+-
h\u id
perp\u id
h_id
是日志历史记录中的uniqe条目。我需要给定点的最新一个(p\u id
->num
)
除此之外,我还需要ext
和name
历史记录在Oracle中,您可以使用
保留
:
+----------------+---------+--------+
| h_id | p_id | str_id |
+----------------+---------+--------+
| 1 | 1 | 11 |
| 2 | 5 | 15 |
| 3 | 5 | 23 |
| 4 | 1 | 62 |
+----------------+---------+--------+
SELECT p.num,
MAX(h.h_id) as maxm,
MAX(s.name) KEEP (DENSE_RANK FIRST ORDER BY h.h_id DESC) as name,
MAX(s.ext) KEEP (DENSE_RANK FIRST ORDER BY h.h_id DESC) as ext
FROM history h INNER JOIN
street s
ON s.str_id = h._str_id INNER JOIN
point p
ON p.p_id = h.p_id
GROUP BY p.num;
keep
语法允许您对聚合执行“first()”和“last()”
+----------------+---------+-------------+
| str_id | ext | name |
+----------------+---------+-------------+
| 15 | | Mein st. 33 | - bad name
| 11 | | eck st. 42 | - bad name
| 62 | abc | Main st. 33 |
| 23 | efg | Back st. 42 |
+----------------+---------+-------------+
+----------------+---------+-------------+-----+
| num | ext | name |h_id |
+----------------+---------+-------------+-----+
| 3453 | efg | Back st. 42 | 3 |
| 4564 | abc | Main st. 33 | 4 |
+----------------+---------+-------------+-----+
SELECT num, max(name), max(ext), MAX(h_id) maxm FROM history
INNER JOIN street on street.str_id = history._str_id
INNER JOIN point on point.p_id = history.p_id
GROUP BY point.num
SELECT p.num,
MAX(h.h_id) as maxm,
MAX(s.name) KEEP (DENSE_RANK FIRST ORDER BY h.h_id DESC) as name,
MAX(s.ext) KEEP (DENSE_RANK FIRST ORDER BY h.h_id DESC) as ext
FROM history h INNER JOIN
street s
ON s.str_id = h._str_id INNER JOIN
point p
ON p.p_id = h.p_id
GROUP BY p.num;