如何获取每个月的最后日期

z9gpfhce  于 2021-06-20  发布在  Mysql
关注(0)|答案(2)|浏览(398)

这个问题在这里已经有答案了

sql仅选择列上具有最大值的行[重复](27个答案)
两年前关门了。
正如标题所说,我想从每个月中选择一个最新日期的记录。我有一张这样的table:

ID  field1          field2          created_at
----------------------------------------------
1   40000.0000      70000.0000      2018-01-31
2   80000.0000      90000.0000      2018-02-28
3   10000.0000      30000.0000      2018-03-31
4   12000.0000      32000.0000      2018-04-30
5   212500.0000     312500.0000     2018-05-31
6   324000.0000     424000.0000     2018-06-30
7   122300.0000     222300.0000     2018-07-26
8   357772.2420     307600.9081     2018-07-31

我提出了这个查询,但它没有按预期工作。
选择id、field1、field2、max(创建时间)作为创建时间 my_table 按年度分组(创建时间),按月份分组(创建时间)按asc创建的订单
我得到的结果是:

ID  field1          field2          created_at
----------------------------------------------
1   40000.0000      70000.0000      2018-01-31
2   80000.0000      90000.0000      2018-02-28
3   10000.0000      30000.0000      2018-03-31
4   12000.0000      32000.0000      2018-04-30
5   212500.0000     312500.0000     2018-05-31
6   324000.0000     424000.0000     2018-06-30
7   122300.0000     222300.0000     2018-07-31   <-- values from ID 7 but date from ID 8

预期产量

ID  field1          field2          created_at
----------------------------------------------
1   40000.0000      70000.0000      2018-01-31
2   80000.0000      90000.0000      2018-02-28
3   10000.0000      30000.0000      2018-03-31
4   12000.0000      32000.0000      2018-04-30
5   212500.0000     312500.0000     2018-05-31
6   324000.0000     424000.0000     2018-06-30
8   357772.2420     307600.9081     2018-07-31

如何从与相同的记录中选择值 MAX(created_at) ?
sqlfiddle公司

dddzy1tm

dddzy1tm1#

通过使用join

select id, field1, field2,T2.created_at from my_values T1 
inner join 
(
select max(created_at) as created_at
                 FROM `my_values` 
 GROUP BY YEAR(created_at), MONTH(created_at) ORDER BY created_at ASC
 ) as T2
 on T1.created_at=T2.created_at

http://sqlfiddle.com/#!2018年9月4日

id  field1  field2  created_at
1   40000   70000   2018-01-31
2   80000   90000   2018-02-28
3   10000   30000   2018-03-31
4   12000   32000   2018-04-30
5   212500  312500  2018-05-31
6   324000  424000  2018-06-30
8   357772.242  307600.9081 2018-07-31
9jyewag0

9jyewag02#

你可以试试这个:

SELECT id, field1, field2, created_at AS created_at 
FROM `my_values` 
where created_at in (select max(created_at)
                 FROM `my_values` 
 GROUP BY YEAR(created_at), MONTH(created_at) ORDER BY created_at ASC )

请参见sqlfiddle

相关问题