通过另一个字段选择具有最大日期顺序的数据[重复]
Posted
技术标签:
【中文标题】通过另一个字段选择具有最大日期顺序的数据[重复]【英文标题】:Select data with max date order by another field [duplicate] 【发布时间】:2017-07-26 01:37:33 【问题描述】:我已经在 SQL 数据库中创建了这个表;
index Reg_No Payment Payday
1 S001 100 2017/01/01
2 S001 500 2017/02/01
3 S002 400 2017/01/01
4 S002 1000 2017/11/01
我需要按 reg_no 对它进行分组,并且只显示最新的付款。所以,最终的结果应该是这样的。
index Reg_No Payment Payday
2 S001 500 2017/02/01
4 S002 1000 2017/11/01
如何为此编写 SQL 查询。
【问题讨论】:
到目前为止你有什么想法? 这里显示学生的每一笔付款。对于打印报告,我只需要检索每个学生的最终付款详细信息。 @Stefano 【参考方案1】:这是日期格式下的发薪日列数据格式还是只是 varchar?
试试这个代码
SELECT * FROM Table where (SELECT MAX(STR_TO_DATE(Payday, '%m-%d-%Y'))) 按Reg_No分组
【讨论】:
发薪日列采用日期格式。 SELECT * FROM Table where (SELECT MAX(STR_TO_DATE(Payday, '%m-%d-%Y'))) group by Reg_No【参考方案2】:SELECT * FROM table group by Reg_No having max(Payday)
Payday
必须是日期类型,否则使用格式函数转换为日期
【讨论】:
拥有最高(发薪日)。嗯,你确定? 是的,这应该可以,如果没有,那么您可以选择 Payday = max(Payday) 没有。这不应该工作,也不会。 @Strawberry 多一个选项SELECT * FROM table group by Reg_No order by Payday desc;
我提供了 3 个记录在案的解决方案之一。【参考方案3】:
DROP TABLE IF EXISTS my_table;
CREATE TABLE my_table
(id INT NOT NULL AUTO_INCREMENT PRIMARY KEY
,reg_no CHAR(4) NOT NULL
,payment INT NOT NULL
,payday DATE NOT NULL
);
INSERT INTO my_table VALUES
(1,'S001',100,'2017/01/01'),
(2,'S001',500,'2017/02/01'),
(3,'S002',400,'2017/01/01'),
(4,'S002',1000,'2017/11/01');
SELECT x.*
FROM my_table x
JOIN
( SELECT reg_no
, MAX(payday) payday
FROM my_table
GROUP
BY reg_no
) y
ON y.reg_no = x.reg_no
AND y.payday = x.payday;
+----+--------+---------+------------+
| id | reg_no | payment | payday |
+----+--------+---------+------------+
| 2 | S001 | 500 | 2017-02-01 |
| 4 | S002 | 1000 | 2017-11-01 |
+----+--------+---------+------------+
2 rows in set (0.01 sec)
【讨论】:
这对我很有效,谢谢以上是关于通过另一个字段选择具有最大日期顺序的数据[重复]的主要内容,如果未能解决你的问题,请参考以下文章