gpt4 book ai didi

mysql - 如何使用分组获取(选择)特定列中具有最大值的行

转载 作者:行者123 更新时间:2023-11-29 07:03:55 27 4
gpt4 key购买 nike

我有一个表,其中包含学生发行的书籍的重复数据。学生可以发行书籍(在本例中一次一本书)。表 trn_books 的 SQL:

CREATE TABLE IF NOT EXISTS `trn_books` (
`tb_id` int(11) NOT NULL,
`tb_roll` varchar(50) NOT NULL,
`tb_isbn` varchar(50) NOT NULL,
`tb_date_issue` varchar(100) NOT NULL,
`tb_date_return` varchar(100) NOT NULL
) ENGINE=InnoDB AUTO_INCREMENT=6 DEFAULT CHARSET=latin1;

INSERT INTO `trn_books` (`tb_id`, `tb_roll`, `tb_isbn`, `tb_date_issue`, `tb_date_return`) VALUES
(1, 'L23', '1234441225', '2017-01-10', '2017-01-20'),
(2, 'L54', '1225565412', '2017-01-12', '2017-01-22'),
(3, 'L23', '1225565412', '2017-01-22', '2017-01-31'),
(4, 'L24', '1225565412', '2017-02-01', '2017-02-11'),
(5, 'L23', '1225565412', '2017-02-15', '2017-02-25');

ALTER TABLE `trn_books`
ADD PRIMARY KEY (`tb_id`);

记录存储方式如下:查询:SELECT * FROM trn_books

enter image description here

现在我想通过 tb_roll 分组来跟踪学生的最后一个事件。我们看到,卷号为 L23 的学生发行了 3 本书,最后一次事件是:(根据 tb_date_return 的最大值)。(5,L23,1225565412,2017-02-15,2017-02-25)。如果我按表格分组,我会得到:

查询:SELECT * FROM trn_books group by tb_roll

enter image description here

但是我需要学生最近的事件结果(tb_date_return的最大值)。期望的结果应该是 tb_id's-->5,4,2。

但是我得到了 tb_id's->1,4,2如何通过mysql查询来实现。

感谢您的帮助...

最佳答案

这通常是使用joingroup by来完成的:

select b.*
from trn_books b join
(select tb_roll, max(tb_date_return) as max_tb_date_return
from trn_books
group by tb_roll
) b2
on b2.tb_roll = b.tb_roll and
b2.max_tb_date_return = b.tb_date_return;

另一种常见的方法是相关子查询:

select b.*
from trn_books b
where b.tb_date_return = (select max(b2.tb_date_return)
from trn_books b2
where b2.tb_roll = b.tb_roll
);

关于mysql - 如何使用分组获取(选择)特定列中具有最大值的行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42437240/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com