MySQL 根据链接表中的日期获取最后结果
MySQL getting last results depending on date from linked tables
我有一个问题需要你的帮助。
我将在示例场景中解释问题所在。
有3个table:A、B、C。
B 和 C 与 table A 之间存在多对一关系。
B 和 C tables 在 table A 中有一个条目的多个条目。
我需要一个只包含来自 B 和 C 的一个条目的查询,但必须选择该条目,以便返回来自 B 和 C 的最新日期条目。我不能依赖 B 和 C 的 ID,因为它们没有排序,也不保证最大的 ID 就是正确的 ID。 B 和 C 中条目的日期是唯一有效标准。
这里有一个示例数据:
Table A
tableaid | Some data ...
------------------
1 | ....
2 | ....
3 | ....
4 | ....
...
Table B
id | linkid | date | colb | Some data ...
----------------------------------------------
1 | 1 | 01/01/2000 | A1 | ....
2 | 1 | 05/20/2001 | A2 | ....
3 | 1 | 07/10/2002 | A3 | ....
4 | 2 | 10/27/2000 | B1 | ....
5 | 2 | 01/01/2001 | B2 | ....
6 | 2 | 06/01/2002 | B3 | ....
7 | 3 | 05/01/2000 | C1 | ....
8 | 3 | 01/01/2003 | C2 | ....
9 | 4 | 05/01/2004 | D1 | ....
...
Table C
id | linkid | date | colc | Some data ...
----------------------------------------------
1 | 1 | 01/01/2000 | a1 | ....
3 | 1 | 05/20/2005 | a2 | ....
2 | 2 | 07/10/2000 | b1 | ....
4 | 2 | 10/27/2003 | b2 | ....
8 | 2 | 01/01/2005 | b3 | ....
6 | 3 | 06/01/2001 | c1 | ....
9 | 3 | 05/01/2005 | c2 | ....
5 | 4 | 01/01/2000 | d1 | ....
7 | 4 | 05/01/2004 | d2 | ....
...
Result
=============================================
tableaid | colb | colc | Some other data ...
---------------------------------------------
1 | A3 | a2 | ...
2 | B3 | b3 | ...
3 | C2 | c2 | ...
4 | D1 | d2 | ...
...
我知道如何只对 A 和 B 或 C 执行此操作,但不知道如何对 A 和 B、C 执行此操作。任何帮助表示赞赏。我有饼干:)
像这样使用子选择
select a.*,
(select colb from tableb b where b.linkid = a.tableaid order by b.date desc limit 1) as colb
from tablea a
colc 的类似内容。
我有一个问题需要你的帮助。
我将在示例场景中解释问题所在。
有3个table:A、B、C。 B 和 C 与 table A 之间存在多对一关系。 B 和 C tables 在 table A 中有一个条目的多个条目。 我需要一个只包含来自 B 和 C 的一个条目的查询,但必须选择该条目,以便返回来自 B 和 C 的最新日期条目。我不能依赖 B 和 C 的 ID,因为它们没有排序,也不保证最大的 ID 就是正确的 ID。 B 和 C 中条目的日期是唯一有效标准。
这里有一个示例数据:
Table A
tableaid | Some data ...
------------------
1 | ....
2 | ....
3 | ....
4 | ....
...
Table B
id | linkid | date | colb | Some data ...
----------------------------------------------
1 | 1 | 01/01/2000 | A1 | ....
2 | 1 | 05/20/2001 | A2 | ....
3 | 1 | 07/10/2002 | A3 | ....
4 | 2 | 10/27/2000 | B1 | ....
5 | 2 | 01/01/2001 | B2 | ....
6 | 2 | 06/01/2002 | B3 | ....
7 | 3 | 05/01/2000 | C1 | ....
8 | 3 | 01/01/2003 | C2 | ....
9 | 4 | 05/01/2004 | D1 | ....
...
Table C
id | linkid | date | colc | Some data ...
----------------------------------------------
1 | 1 | 01/01/2000 | a1 | ....
3 | 1 | 05/20/2005 | a2 | ....
2 | 2 | 07/10/2000 | b1 | ....
4 | 2 | 10/27/2003 | b2 | ....
8 | 2 | 01/01/2005 | b3 | ....
6 | 3 | 06/01/2001 | c1 | ....
9 | 3 | 05/01/2005 | c2 | ....
5 | 4 | 01/01/2000 | d1 | ....
7 | 4 | 05/01/2004 | d2 | ....
...
Result
=============================================
tableaid | colb | colc | Some other data ...
---------------------------------------------
1 | A3 | a2 | ...
2 | B3 | b3 | ...
3 | C2 | c2 | ...
4 | D1 | d2 | ...
...
我知道如何只对 A 和 B 或 C 执行此操作,但不知道如何对 A 和 B、C 执行此操作。任何帮助表示赞赏。我有饼干:)
像这样使用子选择
select a.*,
(select colb from tableb b where b.linkid = a.tableaid order by b.date desc limit 1) as colb
from tablea a
colc 的类似内容。