日期:2014-05-17  浏览次数:20778 次

如何高效率的检索出:在40分钟内,住在同一旅馆并同一房间的数据(借用)
有一张表:dengji_hotel;
id   (id号)
name   (旅客姓名)
rz_date(入住时间)
hotel_name(旅馆名称)
hotel_room(房间号)

  这张表有几百万的数据:
如何高效率的检索出:
在40分钟内,住在同一旅馆并同一房间的数据
下面可以统计同一天内,那40分钟内呢?怎么改?
select   *   from   dengji_hotel   where   rowid   in   (
select   rid   from   (
    select   count(id)over(partition   by   trunc(rz_date),hotel_name,hotel_room)as   rank_id,   rowid   as   rid   from   dengji_hotel
)
where   rank_id   > =   2
)

------解决方案--------------------
select * from dengji_hotel where rowid in (
select rid from (
select count(id)over(partition by trunc(rz_date),hotel_name,hotel_room)as rank_id, rowid as rid from dengji_hotel where rz_date <sysdate-40/1440
)
where rank_id > = 2
)

------解决方案--------------------
Oracle 的 datediff 不会做,大致上用下面的语句可以将所有符合条件的记录取出来,要统计再自己改一下:
select t1.* from dengji_hotel t2
where exists (
select * from dengji_hotel t2
where t2.hotel_name = t1.hotel_name
and t2.hotel_room = t2.hotel_room
and ( (t2.rz_date > t1.rz_date - 40min)
or(t2.rz_date < t1.rz_date + 40min)
)
------解决方案--------------------
上面有不少的好方法了 不过我的建议是弄清楚客户到底需要什么东西 他说的不一定是他想要的 很有可能说错了 上百万的数据乱折腾很容易over的