【发布时间】:2015-05-15 20:44:16
【问题描述】:
我必须获取客户的正确数据,这些数据可能已经过时,而不是最新数据。
表格:
Customer
+---------------------------+---------------+------+-----+---------+
| Field | Type | Null | Key | Default |
+---------------------------+---------------+------+-----+---------+
| customer_id | int(11) | NO | PRI | NULL |
| customer_data | varchar(255) | NO | | NULL |
| customer_valid_from | datetime | NO | | NULL |
| customer_valid_till | datetime | YES | | NULL |
+---------------------------+---------------+------+-----+---------+
Address
+---------------------------+---------------+------+-----+---------+
| Field | Type | Null | Key | Default |
+---------------------------+---------------+------+-----+---------+
| address_id | int(11) | NO | PRI | NULL |
| address_street | varchar(255) | NO | | NULL |
| address_valid_from | datetime | NO | | NULL |
| address_valid_till | datetime | YES | | NULL |
| customer_id | int(11) | NO | | NULL |
+---------------------------+---------------+------+-----+---------+
Details
+---------------------------+---------------+------+-----+---------+
| Field | Type | Null | Key | Default |
+---------------------------+---------------+------+-----+---------+
| detail_id | int(11) | NO | PRI | NULL |
| detail_street | varchar(255) | NO | | NULL |
| detail_valid_from | datetime | NO | | NULL |
| detail_valid_till | datetime | YES | | NULL |
| customer_id | int(11) | NO | | NULL |
+---------------------------+---------------+------+-----+---------+
一开始我得到了一个日期和 customer_id。 现在我想选择所有数据,这些数据与在日期给定 customer_id 的客户有关,这也是给定的。
我现在的 SQL 是这样的:
SELECT customer.*,address.*,details.*
FROM customer
JOIN address
ON address.customer_id = customer.customer_id
JOIN details
ON details.customer.customer_id = customer.customer.id
WHERE customer.customer_valid_from <= givenDate
AND customer.customer_valid_till >= givenDate
AND address.address_valid_from <= givenDate
AND address.address_valid_till >= givenDate
AND details.details_valid_from <= givenDate
AND details.details_valid_till >= givenDate
customer.customer_id = givenID;
在我看来,缺少一部分。 如果一条记录匹配 valid_from
我考虑过 IF 或 CASE 子句,但我对 MySQL 的体验并不令人满意。
【问题讨论】: