请我尝试使用两个表中的最大值查询数据
table1
|user_id | name |
| 001 | Paul |
| 002 | Sean |
table2
|id | class | Year | user_id |
|201 | 1A | 2010 | 001 |
|202 | 2A | 2011 | 001 |
|203 | 1B | 2010 | 002 |
user_id
中的table2
引用user_id
table1
这就是我想要输出的方式
OUTPUT
| user_id | name | class| year |
| 001 | Paul | 2A | 2011 |
| 002 | Sean | 1B | 2010 |
TRIED SO FAR
SELECT
a.user_id,
a.name,
b.class,
max(Year) as year
FROM
table1 a
INNER JOIN
table2 b
ON
a.user_id=b.user_id
GROUP BY user_id
上面的这个查询给了我一个最大年份,它连续有一个不同的类值,因此是前一个类值。这就是它的样子
| user_id | name | class| year |
| 001 | Paul | 1A | 2011 |
| 002 | Sean | 1B | 2010 |
我的查询中哪里出错了?任何帮助表示赞赏。感谢
答案 0 :(得分:1)
也许您可以先按年订购完整的结果集,然后按用户ID分组:
SELECT * FROM (
SELECT
a.user_id,
a.name,
b.class,
year
FROM
table1 a
INNER JOIN
table2 b
ON
a.user_id=b.user_id
ORDER BY year desc
) h
GROUP BY user_id
答案 1 :(得分:0)
由于您已使用group by
,因此可以使用substring_index()
/ group_concat()
黑客:
SELECT a.user_id, a.name,
substring_index(group_concat(b.class order by year desc), ',', 1) as maxclass
max(Year) as year
FROM table1 a INNER JOIN
table2 b
ON a.user_id=b.user_id
GROUP BY a.user_id, a.name;
您也可以使用group by
not exists
的情况下执行此操作
SELECT a.user_id, a.name, b.class, b.year
FROM table1 a INNER JOIN
table2 b
ON a.user_id=b.user_id
WHERE NOT EXISTS (select 1 from table2 b2 where b2.user_id = b.user_id and b2.year > b.year)
where
子句重新描述查询。它说:“从table2
获取同一用户没有更大year
的所有行。”这相当于获取具有最大年份的行。而且,这是标准的SQL,它在任何数据库中都能很好地工作。
答案 2 :(得分:0)
尝试使用子查询
SELECT a.user_id, a.name, (Select class FROM table2 where year = max(b.year)) as class, max(b.Year) as year FROM table1 a,table2 b WHERE a.user_id=b.user_id