Oracle:最早的停留日期(两列)

时间:2014-12-10 21:33:21

标签: sql oracle oracle-apex

我有三列id_user, date_stay_start, date_stay_stop,我需要返回第一次停留的完整日期(最早的)。

我目前有这样的事情:

SELECT users.id_user, Min(orders.date_stay_start), Min(orders.date_stay_stop)
FROM users
JOIN orders ON users.id_user=orders.id_user
WHERE orders.date_stay_start IS NOT NULL
GROUP BY users.id_user;

但是有一个问题。如果我有一个客户的两个订单:

  • 首次订购02 / Jun / 2014(date_stay_start)10 / Jun / 2014 (date_stay_stop)和
  • 二阶04 / Jun / 2014(date_stay_start)2014年6月8日 (date_stay_stop)。

返回的结果将包含02 / Jun / 2014(date_stay_start)和2014年6月8日(date_stay_stop)。

但应该是02 / Jun / 2014(date_stay_start)10 / Jun / 2014(date_stay_stop)。

我正在使用Oracle 11g。谢谢你的任何建议。

2 个答案:

答案 0 :(得分:0)

这样的事可能有用......

SELECT users.id_user, orders.date_stay_start, orders.date_stay_stop
FROM users
JOIN orders 
  ON users.id_user=orders.id_user
INNER JOIN (Select Min(Orders.date_Stay_start) DSS, id_user from orders group by ID_user) o
  ON O.DSS = orders.date_stay_start
 and O.id_user = orders.Id_user
WHERE orders.date_stay_start IS NOT NULL
GROUP BY users.id_user;

答案 1 :(得分:0)

或者你可以做这样的事情

select * from (
  SELECT u.id_user
    ,o.date_stay_start
    ,o.date_stay_stop
    ,row_number() over (partition by u.id_user order by o.date_stay_start) rn
  FROM users u
  JOIN orders o
    ON u.id_user = o.id_user
  WHERE o.date_stay_start IS NOT NULL
) where rn = 1;