简体   繁体   English

获取MySQL中每个月的最后一条记录......?

[英]Get last record of each month in MySQL…?

I have a problem in writing a query for MySQL. 我在编写MySQL查询时遇到问题。 I have following fields in the DB 我在DB中有以下字段

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

I need to select the last record of each month . 我需要select the last record of each month That is for the month FEB record # 3 month MARCH record # 6 and for month APRIL record # 8 那是month FEB record # 3 month MARCH record # 6month APRIL record # 8

Please help me..... 请帮我.....

Thanks in advance..... 提前致谢.....

SELECT * FROM table 
WHERE created_on in 
(select DISTINCT max(created_on) from table 
GROUP BY YEAR(created_on), MONTH(created_on))

Building off Dheer's answer: 建立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)

Be sure you have indexes on created_on, otherwise this query will kill your database if that table gets more than a couple hundred rows. 确保您在created_on上有索引,否则如果该表超过几百行,此查询将终止您的数据库。

You first need to group by year and month (otherwise you'd be filtering out months in other years). 您首先需要按年份月份分组(否则您将在其他年份过滤掉几个月)。 Use MAX() to get the greatest date for each group. 使用MAX()获取每个组的最大日期。

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

Assuming that there is only one record for the day; 假设当天只有一条记录;

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

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM