MySQL查询帮助(join,subselect)

时间:2014-05-01 09:15:10

标签: mysql sql

我有两张桌子:订单和预订。

订单表包含来自客户的唯一订单。每位客户都预订了一个1到5年的储物柜,因此预订表可以包含1至5行pr。订单(每年1行)。预订表中的每一行都包含和end_date,每年的日期相同(20XX-06-30)。

我想选择预订表中相应最终 end_date的所有订单是今年(2014-06-30)。

SELECT DISTINCT orders.id 
FROM   orders, 
   bookings 
WHERE  orders.id = bookings.order_id 
   AND bookings.end_date = '2014-06-30' 

此查询的问题在于,它还会选择预订行中的end_date在接下来的几年中继续的订单(2015-06-30,2016-06-30等)。

2 个答案:

答案 0 :(得分:2)

我不确定我是否理解得很好,但这里是我理解的解决方案,这应该可以获得最后结束日期(最长)为2014-06-30的订单ID。

SELECT orders.id, MAX(bookings.end_date)
FROM orders INNER JOIN bookings 
ON orders.id = bookings.order_id 
GROUP BY bookings.order_id
HAVING MAX(bookings.end_date) = '2014-06-30'

答案 1 :(得分:1)

也许再次加入预订,检查相同订单ID的更大预订日期: -

SELECT orders.id 
FROM orders
INNER JOIN bookings ON orders.id = bookings.order_id 
LEFT OUTER JOIN bookings2 ON orders.id = bookings2.order_id AND bookings2.end_date > bookings.end_date
WHERE bookings.end_date = '2014-06-30'
AND bookings2.end_date IS NULL
相关问题