在oracle sql中配对记录

时间:2016-10-27 16:08:18

标签: sql oracle cross-apply

这是我的sql: 执行时,它说

  
      
  1. 00000 - “CROSS APPLY”位置上的“缺少关键字”。
  2.   

我只是尝试将一些记录(在一天内= 20160720)配对,并在表格中使用相同的TICKET_ID,并返回其T_TIME和T_LOCATION。

select a.T_TIME, b.T_TIME, a.T_LOCATION, b.T_LOCATION 
FROM TABLE a 
CROSS APPLY 
(select * from TABLE b where a.TICKET_ID = b.TICKET_ID having count(TICKET_ID) > 1) b
where (a.T_DATE=20160720);

使用CROSS APPLY

导致问题

好的,这是我原本想要解决的问题:)

表格如下:

T_TIME        |T_LOCATION   |    TICKET_ID|T_DATE
20160720091032|      ---0103|       1A268F|20160720
20160720095842|      ---0115|       63T37H|20160720
20160720133408|      ---0124|       1A268F|20160720
20160721152400|      ---0116|       598I3R|20160721
20160720125844|      ---0147|       63T37H|20160720

我想用相同的TICKET_ID配对记录。 2条记录共享一个相同的TICKET_ID。我希望输出像:

20160720091032|20160720133408|0103|0124|
20160720095842|20160720125844|0115|0147|

该表非常大,如T_DATE = 20160720,总计将有200000条记录。

1 个答案:

答案 0 :(得分:0)

这样做的一种方法是:

select a.ticket_id, a.t_time, b.t_time, a.t_location, b.t_location
from the_table a
  join the_table b on a.ticket_id = b.ticket_id and a.t_time < b.t_time
where a.t_date = 20160720;

加入条件and a.t_time < b.t_time确保对的“其他”版本不在结果中,例如你只得到(0103,0124)而不是(0124,0103)。