Php 在MySQL中获取每个月的最后一条记录。。。。?

Php 在MySQL中获取每个月的最后一条记录。。。。?,php,mysql,database,Php,Mysql,Database,我在为MySQL编写查询时遇到了一个问题。 我在数据库中有以下字段 id created_on status 1 2011-02-15 12:47:09 1 2 2011-02-24 12:47:09 1 3 2011-02-29 12:47:09 1 4 2011-03-11 12:47:09 1 5 2011-03-15 12:47:09 1 6 2011-03-22 1

我在为MySQL编写查询时遇到了一个问题。 我在数据库中有以下字段

id     created_on            status
1      2011-02-15 12:47:09    1 
2      2011-02-24 12:47:09    1
3      2011-02-29 12:47:09    1
4      2011-03-11 12:47:09    1
5      2011-03-15 12:47:09    1
6      2011-03-22 12:47:09    1
7      2011-04-10 12:47:09    1
8      2011-04-11 12:47:09    1
我需要选择每个月的最后一条记录。 这是2月份的记录3月份的记录6 4月份的记录是8

请帮帮我


提前感谢….

您首先需要按年份和月份进行分组,否则您将在其他年份过滤掉月份。使用MAX为每个组获取最长日期

SELECT *, MAX(created_on) FROM table
GROUP BY YEAR(created_on), MONTH(created_on) 

假设当天只有一条记录

SELECT * from table where created_on IN (Select MAX(created_on) FROM table
GROUP BY YEAR(created_on), MONTH(created_on) )

基于Dheer的答案:

SELECT r.*
FROM table AS r
    JOIN (
        SELECT MAX(t.created_on) AS created_on
        FROM table AS t
        GROUP BY YEAR(t.created_on), MONTH(t.created_on)
    ) AS x USING (created_on)

请确保已在上创建索引,否则,如果该表的行数超过几百行,此查询将终止数据库。

这与最后两个答案一样,不会返回预期结果。当根据结果分组时,MySQL不会为不在分组中的字段返回预期的行结果。换句话说,如果非分组字段与多行匹配,则它们是混沌的。使用此功能时,每个组中的所有行对于按部分从组中写入的列应具有相同的值。服务器可以从组中自由返回任何值,因此结果是不确定的,除非所有值都相同。检查我发布的答案可能重复。我相信它会回答您的问题。请参阅中的“已接受的答案”,以获得更有效的解决方案即使每天有多个记录,这也会起作用。唯一失败的情况是每秒有多条记录,特别是在一个月的最后一秒。在同一个表中再添加一个左连接以根据最高ID进行选择将是这个问题的解决方案。哦,我可能还要补充一点,不建议在“in”中使用子查询,因为这会降低MySQL的性能。数据库将对主表中的每一行运行查询。最好将其移动到联接子查询中。应重新编写此命令以将子查询放入联接中,否则,随着表的增长,这将破坏数据库性能:子查询对我来说需要10分钟以上。。。我每天大约有28个条目。。联接查询有很大的改进。。感谢它为大桌子工作。有没有办法把它换成ON?我正在使用的框架似乎只在上面使用,但我得到了不同数量的results@RobertWent是的:USING只是ON的缩写,所以前者总是可以扩展到后者。如果我有多个创建时间完全相同的记录怎么办?我需要连接只匹配具有相同时间戳的第一条记录
SELECT r.*
FROM table AS r
    JOIN (
        SELECT MAX(t.created_on) AS created_on
        FROM table AS t
        GROUP BY YEAR(t.created_on), MONTH(t.created_on)
    ) AS x USING (created_on)