在加入中获取 table 的最大日期
Get max date from table in join
我的第一个table是会员table:
member_id, name, address, email
1 jon 122 any jon@test.ca
2 amy 111 gee amy@test.ca
我的第二个 table 是完成的测试级别:
MemberHistoryTable
member_id, level, date
1 a 2007
1 b 2008
1 c 2009
1 d 2010
2 a 2007
2 b 2008
2 c 2009
2 d 2010
2 d 2011
我想检索历史上的会员信息和最近的日期table:
jon, 122 any, jon@test.ca, 2010
amy, 111 gee, amy@test.ca, 2011
我尝试了很多不同的方法来连接两个 table,例如:
SELECT
memberTable.name,
memberTable.address,
memberTable.email,
memberHistoryTable.date
FROM memberTable
LEFT JOIN memberHistoryTable
ON memberHistoryTable.member_id=memberTable.member_id
但这会重现多行相同信息,每个日期一行...
jon, 122 any, jon@test.ca, 2007
jon, 122 any, jon@test.ca, 2008
jon, 122 any, jon@test.ca, 2009
jon, 122 any, jon@test.ca, 2010
amy, 111 gee, amy@test.ca, 2007
amy, 111 gee, amy@test.ca, 2008
amy, 111 gee, amy@test.ca, 2009
amy, 111 gee, amy@test.ca, 2010
amy, 111 gee, amy@test.ca, 2011
如果我将联接更改为:
LEFT JOIN (SELECT MAX(memberHistoryTable.date) FROM memberHistoryTable) X
ON x.member_id = memberTable.member_id
我得到了我想要的行,但日期为 NULL...
jon, 122 any, jon@test.ca, NULL
amy, 111 gee, amy@test.ca, NULL
我尝试了多种连接变体,none 似乎有效。空值或系统挂起。
我花了很多时间搜索,发现许多解决方案似乎对我不起作用。奇怪的是,对于此查询,我需要从另一个 table 中提取日期,但那个似乎有效。
您可以使用 MAX()
and a GROUP BY
来获得您想要的结果:
SELECT m.name, m.address, m.email, MAX(mh.date) `date` FROM memberTable m
INNER JOIN memberHistoryTable mh ON mh.member_id = m.member_id
GROUP BY m.name;
我假设 members
table 中 amy
的 member_id
应该是 2
而不是 1
,因为它似乎 member_id
是一个唯一值,用于标识 table.
中的每个成员
上面的查询会产生如下结果:
+------+---------+-------------+--------------+
| name | address | email | date |
+------+---------+-------------+--------------+
| amy | 111 gee | amy@test.ca | 2011 |
| jon | 122 any | jon@test.ca | 2010 |
+------+---------+-------------+--------------+
我还想指出 date
是 mysql 中的关键字,即使它可以用作不带引号的标识符,我也会考虑将我的专栏命名为其他名称。
我还建议您按 member_id
而不是 name
分组,因为据我所知,名称不能保证是唯一的:
SELECT m.member_id, m.name, m.address, m.email, MAX(mh.date) `date` FROM memberTable m
INNER JOIN memberHistoryTable mh ON mh.member_id = m.member_id
GROUP BY m.member_id;
我的第一个table是会员table:
member_id, name, address, email
1 jon 122 any jon@test.ca
2 amy 111 gee amy@test.ca
我的第二个 table 是完成的测试级别:
MemberHistoryTable
member_id, level, date
1 a 2007
1 b 2008
1 c 2009
1 d 2010
2 a 2007
2 b 2008
2 c 2009
2 d 2010
2 d 2011
我想检索历史上的会员信息和最近的日期table:
jon, 122 any, jon@test.ca, 2010
amy, 111 gee, amy@test.ca, 2011
我尝试了很多不同的方法来连接两个 table,例如:
SELECT
memberTable.name,
memberTable.address,
memberTable.email,
memberHistoryTable.date
FROM memberTable
LEFT JOIN memberHistoryTable
ON memberHistoryTable.member_id=memberTable.member_id
但这会重现多行相同信息,每个日期一行...
jon, 122 any, jon@test.ca, 2007
jon, 122 any, jon@test.ca, 2008
jon, 122 any, jon@test.ca, 2009
jon, 122 any, jon@test.ca, 2010
amy, 111 gee, amy@test.ca, 2007
amy, 111 gee, amy@test.ca, 2008
amy, 111 gee, amy@test.ca, 2009
amy, 111 gee, amy@test.ca, 2010
amy, 111 gee, amy@test.ca, 2011
如果我将联接更改为:
LEFT JOIN (SELECT MAX(memberHistoryTable.date) FROM memberHistoryTable) X
ON x.member_id = memberTable.member_id
我得到了我想要的行,但日期为 NULL...
jon, 122 any, jon@test.ca, NULL
amy, 111 gee, amy@test.ca, NULL
我尝试了多种连接变体,none 似乎有效。空值或系统挂起。
我花了很多时间搜索,发现许多解决方案似乎对我不起作用。奇怪的是,对于此查询,我需要从另一个 table 中提取日期,但那个似乎有效。
您可以使用 MAX()
and a GROUP BY
来获得您想要的结果:
SELECT m.name, m.address, m.email, MAX(mh.date) `date` FROM memberTable m
INNER JOIN memberHistoryTable mh ON mh.member_id = m.member_id
GROUP BY m.name;
我假设 members
table 中 amy
的 member_id
应该是 2
而不是 1
,因为它似乎 member_id
是一个唯一值,用于标识 table.
上面的查询会产生如下结果:
+------+---------+-------------+--------------+
| name | address | email | date |
+------+---------+-------------+--------------+
| amy | 111 gee | amy@test.ca | 2011 |
| jon | 122 any | jon@test.ca | 2010 |
+------+---------+-------------+--------------+
我还想指出 date
是 mysql 中的关键字,即使它可以用作不带引号的标识符,我也会考虑将我的专栏命名为其他名称。
我还建议您按 member_id
而不是 name
分组,因为据我所知,名称不能保证是唯一的:
SELECT m.member_id, m.name, m.address, m.email, MAX(mh.date) `date` FROM memberTable m
INNER JOIN memberHistoryTable mh ON mh.member_id = m.member_id
GROUP BY m.member_id;