通过另一个字段选择具有最大日期顺序的数据[重复]

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)

【讨论】:

这对我很有效,谢谢

以上是关于通过另一个字段选择具有最大日期顺序的数据[重复]的主要内容,如果未能解决你的问题,请参考以下文章

如何选择具有最新日期的行并根据该行计算另一个字段

SQL - 使用分组方式选择,从具有最大值(日期)的寄存器中获取数据

oracle通过一个字段分组,取另一个字段的最大值

如何加入表格并按最大日期选择 [重复]

Combobox中的独特值,利用另一个范围的最大日期

通过分组选择最大日期?