sql - Oracle:根据最近的时间戳获取结果
问题描述
您每 90 分钟只能发布一次。
嗨,我有以下表格。我正在尝试citi_id
在第二个表格中获取最近的交易。
我的第一张桌子City
有trip_id
,citi_id
和citi_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,因为它是最低的。
解决方案
您可以为此使用分析函数:
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<>在这里摆弄
推荐阅读
- javascript - React 是否点击了父 div 元素
- powershell - 如何使用 powershell 将成员添加到分发列表?
- python - 是否可以在无头模式下在 selenium 中打开页面,然后如果它返回 200 状态代码以在正常窗口中打开它?
- javascript - 用 ReactQuill 截断
- javascript - 如何在 JavaScript 中选择不重复的项目
- react-native - 我可以在来自 sim 的通话期间访问麦克风吗?
- reactjs - 反应 Webpack 设置的问题
- sql - Oracle中基于多列的数据透视
- python - 在 sympy 中绘制微分方程不起作用
- javascript - 使用状态在reactjs中使div选择取消选择