因此,我需要显示我的所有客户和与相关的预订号码(空,如果没有预订)没有重复的客户。如果客户有很多预订,我只需要显示最近的预订日期。我不明白为什么我的查询不起作用。
以下是is所做的:http://sqlfiddle.com/#!9/df0455/19号
SELECT c.name, x.number, x.start_date
FROM customer c
LEFT JOIN
(SELECT b.customer_id, b.number, b.start_date
FROM booking b
INNER JOIN (
SELECT customer_id, MIN(ABS(TIME_TO_SEC(TIMEDIFF(NOW(), start_date)))) as mindiff
FROM booking
GROUP BY customer_id
) nearest ON b.customer_id = nearest.customer_id AND ABS(TIME_TO_SEC(TIMEDIFF(NOW(), start_date))) = mindiff
) AS x ON c.id = x.customer_id
事实上 Paul
显示三次,需要的是显示 Paul
就一次,最近的订票号码是谁 booking-1 2019-11-05 21:45:00
我希望你能帮助我
2条答案
按热度按时间fv2wmkja1#
可以使用行限制相关子查询进行筛选:
在db小提琴中,这会产生:
如果您还想显示没有预订的客户,那么您可以
left join
并将过滤移到on
合同条款join
:plupiseo2#
你可以用
NOT EXISTS
要获得最近的预订并加入客户:请看演示。
结果: