Oracle sql Inner join first record in right table
inner-join, join, oracle, sql
Solution
SELECT t1.symbol, t3.high, t3.low, t3.timestamp
FROM Table1 t1
JOIN (
SELECT inn.*
FROM (SELECT t2.*, (ROW_NUMBER() OVER(PARTITION BY symbol ORDER BY timestamp DESC)) As Rank
FROM Table2 t2) inn
WHERE inn.Rank=1
) t3
ON t1.symbol = t3.symbol;
See SQL Fiddle
Problem
my question is this: I have two tables such as this: ``` username | portname | symbol | shares ---------+----------+--------+------- phil | test | APL | 214 ---------+----------+--------+-------- ``` It has more records, but that's just an example. Then I have another table such as this, that has multiple records per symbol ``` symbol | high | low | timestamp -------+------+-----+----------- APL | 200 | 20 | *timestamp object APL | 400 | 34 | *timestamp object ``` I want a table to be returned where I join the two, but only the first row from the second table is joined so something like this is returned: ``` symbol | high | low | timestamp -------+------+-----+---------- APL | 400 | 34 | *timestamp object ``` So only one record from the right table is matched. I've tried alot of things but haven't gotten anything to work with group by's or distinct. Thanks!