我有三列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)和2014年6月8日(date_stay_stop)。
但应该是02 / Jun / 2014(date_stay_start)10 / Jun / 2014(date_stay_stop)。
我正在使用Oracle 11g。谢谢你的任何建议。
答案 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;