mysql - 没有重复数据的 MySQL 最近日期
问题描述
因此,我需要显示我所有的客户以及相关的预订号(如果没有预订,则为空),而不会出现重复的客户。如果客户有很多预订,我只需要显示最近的预订日期。我不明白为什么我的查询不起作用。
这是做了什么: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
显示3次,Paul
只显示一次,最近的订票号码是谁booking-1 2019-11-05 21:45:00
我希望你能帮帮我
解决方案
您可以使用NOT EXISTS
获取最近的预订并加入客户:
SELECT c.id, c.name, t.number, t.start_date
FROM customer c
LEFT JOIN (
SELECT b.* FROM booking b
WHERE NOT EXISTS (
SELECT 1 FROM booking
WHERE customer_id = b.customer_id
AND ABS(TIMESTAMPDIFF(SECOND, NOW(), start_date)) < ABS(TIMESTAMPDIFF(SECOND, NOW(), b.start_date))
)
) t ON t.customer_id = c.id
请参阅演示。
结果:
| id | name | number | start_date |
| --- | ------ | --------- | ------------------- |
| 1 | Paul | booking-1 | 2019-11-05 21:45:00 |
| 2 | John | booking-3 | 2019-09-27 21:45:00 |
| 3 | Morgan | booking-5 | 2019-09-27 21:45:00 |
| 4 | Jane | | |
| 5 | Mike | | |
推荐阅读
- excel - 有一个复选框将值添加到具有现有值的单元格
- r - 如何将具有坐标列表(MultliLineString)的列转换为R上的sf/st对象?
- embedded - 覆盖 SD 分区布局的 WKS_FILE
- java - 如何从存储库访问和返回 AsyncTask 的结果?
- heroku - 如何在 HerokuApp 上访问 root 以使用 wget 命令
- android - 计费 API 3.0。价格变动用户通知
- flutter - 什么是 NoSuchMethod 错误,我该如何解决?
- visual-studio-code - VS Code + PHP Intelephense + Remote-SSH + Symfony 3:未定义的方法错误
- php - KNP Paginator 在 Symfony 5 中显示 Invalid item per page number 错误
- elasticsearch - 获取 Elasticsearch 中字段值与任何数组元素匹配的所有文档