MySQL选择带有日期和ID的最大总计
我有一个cron脚本,它每天将活动用户的总数写入一个表。我现在试图生成一个简单的报告,显示每个月的“最高水位线”。因为一些账户在本月到期,所以可能最高的数字不在月末 这是我的表结构的一个示例MySQL选择带有日期和ID的最大总计,mysql,reporting,max,Mysql,Reporting,Max,我有一个cron脚本,它每天将活动用户的总数写入一个表。我现在试图生成一个简单的报告,显示每个月的“最高水位线”。因为一些账户在本月到期,所以可能最高的数字不在月末 这是我的表结构的一个示例 tblUserLog ----------- record_id INT(11) // PRIMARY KEY run_date DATE // DATE RUN ttl_count INT(11) // TOTAL FOR DAY 样本数据: record_id
tblUserLog
-----------
record_id INT(11) // PRIMARY KEY
run_date DATE // DATE RUN
ttl_count INT(11) // TOTAL FOR DAY
样本数据:
record_id run_date ttl_count
1 2013-06-01 500
2 2013-06-10 510
3 2013-06-20 520
4 2013-06-30 515
5 2013-07-01 525
6 2013-07-10 530
7 2013-07-20 540
8 2013-07-31 550
9 2013-08-01 560
我想退回的是:
record_id run_date ttl_count
3 2013-06-20 520
8 2013-07-31 550
9 2013-08-01 560
我尝试了两个非常接近的查询
// This will give me the total for the first of the month
SELECT s.record_id, s.run_date, s.ttl_count
FROM tblStatsIndividual s
JOIN (
SELECT record_id
FROM tblStatsIndividual
GROUP BY DATE_FORMAT(run_date, '%Y %m')
HAVING MAX(ttl_count)
) s2
ON s2.record_id = s.record_id
ORDER BY run_date DESC
这将返回每个月第一个月的总计,以及总计的记录id和正确日期
试过这个
SELECT record_id,max(run_date), max(ttl)
FROM (
SELECT record_id,run_date, max(ttl_count) AS ttl
FROM tblStatsIndividual
GROUP BY DATE_FORMAT(run_date, '%Y %m')
) a
GROUP BY DATE_FORMAT(run_date, '%Y %m')
ORDER BY run_date DESC
这一行似乎获得了正确的“高水位线”,但它没有返回记录id,也没有返回高水位线所在行的运行日期
如何获得最高总数的记录id和运行日期
Select detail.Record_ID, detail.Run_Date, detail.ttl_Count
From tblStatsIndividual detail
Inner Join
(Select Year(run_date) as Year, Month(Run_date) as Month, Max(ttl_count) as ttl
From tblStatsIndividual
Group By Year(run_date), Month(Run_date)) maximums
On maximums.Year = Year(detail.Run_date) and maximums.Month = Month(detail.Run_date)
and maximums.ttl = detail.ttl_count
我应该这样做。注意:根据您的要求,如果您在同一个月内有两条记录的ttl_计数相同(且该月最高),则它们都将被返回。根据@Tony Hopkinson提供的帮助,此查询将获取信息。需要注意的一点是,它显示了第一次出现最大总计的ID和日期,因此,如果总计在一个月内连续三天相同,则返回第一天的ID。就我而言,最后一个ID更为理想,但我可以接受这一点:
SELECT s.Record_ID, s.Run_Date, s.ttl_Count
FROM tblStatsIndividual s
INNER JOIN (
SELECT YEAR(run_date) AS yr, MONTH(run_date) AS mon, MAX(ttl_count) AS ttl
FROM tblStatsIndividual
GROUP BY DATE_FORMAT(run_date, '%Y %m')
) maximums
ON maximums.yr = YEAR(s.run_date)
AND maximums.mon = MONTH(s.run_date)
AND maximums.ttl = s.ttl_Count
GROUP BY ttl_count
ORDER BY run_date DESC
当我运行这个查询时,它每天都给我提供信息。我只想要每月/每年最高的一个。。。