Oracle:根据最近的时间戳获取结果



您每90分钟只能发布一次。

嗨,我有下面的桌子。我正在尝试获取第二个表中有最近事务的citi_id

我的第一个表Citytrip_idciti_idciti_name

在一次旅行中,一个人可以去一个或多个城市旅行一次或多次。我希望得到他一次旅行去了两个以上城市的结果,如果是真的,我希望得到第二张表中基于time_visited的最新时间戳。如果两个城市的两个时间戳相同,则得到访问次数较多的citi,如果两个访问次数相同,则获得最少的citi_id

Create table City(trip_id number(10),citi_id number(10),citi_name varchar2(40));

Create table City_Time(citi_id number(10),time_visited DATE);


Insert Into City values(1,17854,'Omaha');
Insert Into City values(1,27854,'Newyork')
Insert Into City values(2,37854,'Chicago');
Insert Into City values(2,47854,'Vegas')
Insert Into City values(2,57854,'Los Angels')
Insert Into City values(3,67854,'San Francisco');

Insert into City_Time(citi_id,time_visited)values(17854,TO_DATE('2015/05/15 8:30:25', 'YYYY/MM/DD HH:MI:SS'));
Insert into City_Time(citi_id,time_visited)values(27854,TO_DATE('2015/05/15 8:30:25', 'YYYY/MM/DD HH:MI:SS'));
Insert into City_Time(citi_id,time_visited)values(27854,TO_DATE('2015/05/20 8:30:25', 'YYYY/MM/DD HH:MI:SS'))
Insert into City_Time(citi_id,time_visited)values(37854,TO_DATE('2015/07/17 8:30:25', 'YYYY/MM/DD HH:MI:SS'))
Insert into City_Time(citi_id,time_visited)values(47854,TO_DATE('2015/07/17 8:30:25', 'YYYY/MM/DD HH:MI:SS'))
Insert into City_Time(citi_id,time_visited)values(57854,TO_DATE('2015/08/22 8:30:25', 'YYYY/MM/DD HH:MI:SS'))
Insert into City_Time(citi_id,time_visited)values(67854,TO_DATE('2015/09/31 8:30:25', 'YYYY/MM/DD HH:MI:SS'))

输入:trip_id=1 true,正好有两个行程

输出:citi_id=27854

输入:trip_id=2 true,正好有两个行程

Ouput:citi_id=37854,因为它是最低的。

您可以为此使用分析函数:

SELECT citi_id,
time_visited
FROM   (
SELECT t.citi_id,
t.time_visited,
COUNT( t.citi_id ) OVER( PARTITION BY trip_id ) AS num_cities,
RANK() OVER ( PARTITION BY trip_id ORDER BY time_visited DESC )
AS time_rank
FROM   city c
INNER JOIN city_time t
ON ( c.citi_id= t.citi_id )
)
WHERE  num_cities = 2
AND    time_rank = 1;

哪个输出:

CITI_ID|TIME_VISITED------:|:------------------27854|2015-05-20 08:30:25

db<gt;小提琴这里

最新更新