[英]MySQL - Selecting the latest records before a given date in a JOIN
忍受我,我是SQL的新手,在解释这个问题时遇到了麻烦...
我有两个类似于以下的表:
test1
+------+----------+----------+-----------+
| id | serial | t1data | t1date |
+------+----------+----------+-----------+
| 1 | a | ... | 6/02/12 |
| 2 | a | ... | 6/04/12 |
| 3 | b | ... | 6/06/12 |
| 4 | a | ... | 6/08/12 |
+------+----------+----------+-----------+
test2
+------+----------+----------+-----------+
| id | serial | t2data | t2date |
+------+----------+----------+-----------+
| 1 | a | ... | 6/05/12 |
| 2 | b | ... | 6/07/12 |
| 3 | b | ... | 6/08/12 |
| 4 | a | ... | 6/09/12 |
+------+----------+----------+-----------+
我想创建一个查询联接两个表,以便在每个记录test2
对应于最新test1
该日期之前发生的记录test2
。 任何给定的序列可以在任一表中具有多个记录。
使用上面的示例,结果应如下所示:
+----------+----------+-----------+----------+-----------+
| serial | t2data | t2date | t1data | t1date |
+----------+----------+-----------+----------+-----------+
| a | ... | 6/05/12 | ... | 6/04/12 |
| b | ... | 6/07/12 | ... | 6/06/12 |
| b | ... | 6/08/12 | ... | 6/06/12 |
| a | ... | 6/09/12 | ... | 6/08/12 |
+----------+----------+-----------+----------+-----------+
这是我尝试过的查询,但不起作用。
SELECT
t2.serial, t2.t2data, t2.t2date, t1a.t1data, t1a.t1date
FROM
test2 t2
JOIN
test1 t1a ON (t1a.serial = t2.serial AND t1a.t1date > t2.t2date)
LEFT JOIN
test1 t1b ON (t1a.serial = t1b.serial AND t1a.t1date < t1b.t1date)
WHERE
t1b.serial IS NULL
我可能会全都错了,但是我该怎么做才能完成这项工作?
我不确定这是否是最好的方法,但是它在起作用:
SELECT t2.serial, t2.t2data, t1.t1data, t1.t1date
FROM
(SELECT t2.serial, t2.t2data, t2.t2date,
(SELECT max(t1date)
FROM test1 t1
WHERE t1.serial = t2.serial
AND t1.t1date <= t2.t2date) AS t1date
FROM test2 t2) t2
LEFT OUTER JOIN
test1 t1 ON t2.serial = t1.serial AND t2.t1date = t1.t1date;
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.