首页 > 解决方案 > Oracle:根据最近的时间戳获取结果

问题描述

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

嗨,我有以下表格。我正在尝试citi_id在第二个表格中获取最近的交易。

我的第一张桌子Citytrip_id,citi_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 它正好有两次行程

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

标签: sqloracleoracle10ggreatest-n-per-group

解决方案


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

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;

哪个输出:

花旗ID | TIME_VISITED       
------: | :-----------------
  27854 | 2015-05-20 08:30:25

db<>在这里摆弄


推荐阅读