【问题标题】:how to create a table like this by mysql如何通过mysql创建这样的表
【发布时间】:2018-06-27 16:12:21
【问题描述】:

我有一张这样的桌子:

ID    Payment      year
A      10           1
A      15           2
A      12           3
B      11           2
B      15           4
C      25           1
C      17           3 

我正在寻找一个查询,该查询返回每个 ID 的最后一年的行。年份列按每个 ID 递增的顺序排列。

我需要这样的结果:

ID    Payment    year
 A      12        3
 B      15        4
 C      17        3

到目前为止我有这个查询:

select ID, Payment, Year from payment_table
where year = (select max(year) from ?????????);

我不知道应该写什么来代替????????

如果有人能给我一些想法,将不胜感激。

【问题讨论】:

  • 为什么 A 的 MIN 第 1 年和 B 的 MAX 第 4 年和 C 的第 3 年是一个错误?
  • 到目前为止你尝试了什么????

标签: mysql sql subquery max workbench


【解决方案1】:

使用subquery

select t.*
from table t
where year = (select max(t1.year) from table t1 where t1.id = t.id);

【讨论】:

  • table 作为表名可能是一个糟糕的选择,可能会导致混淆。
  • @shayan select t.* from table t... 表示您正在从名为table 的表中进行选择,并在任何后续表达式中将该表称为t。内部select max(t1.year) from table t1... 是从名为table 的同一表中选择的,并将该表称为t1,以免与t 的第一次选择结果混淆。
  • @shayan。 . . table 是表的虚拟名称,t1 是表的别名。所以,你只需用你原来的表名重命名它。
  • @shayan 将table 替换为payment_table。希望这是一个你搞砸的生产数据库。你似乎对 SQL 一无所知。这是最基本的查询之一,您甚至无法弄清楚要更改什么。我建议你不要再乱搞了,聘请懂数据库的人。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2014-03-06
  • 1970-01-01
  • 1970-01-01
  • 2021-01-29
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多