简体   繁体   English

选择MySQL中日期最高的行

[英]Select row with the highest date in MySQL

I have a table with rows per user per day. 我有一个表,每个用户每天都有行。

I want to group by month and year to produce a summary for a given month. 我想按月和年分组以生成给定月份的摘要。

The problem is, is that it is selecting the value of the first row (ie the 1st of September instead of 5th September) which gives me the wrong number because I want the latest running total of the column. 问题是,它正在选择第一行的值(即9月1日而不是9月5日),这给了我错误的数字,因为我想要该列的最新运行总计。

I have tried: 我努力了:

SELECT SUM(prospectCount) FROM report_sales_day AS RSD
WHERE userId = 93
AND YEAR(date) = YEAR('2014-09-01')
AND MONTH(date) = MONTH('2014-09-01')
AND (SELECT MAX(RSDI.date)
     FROM report_sales_day AS RSDI
     WHERE MONTH(RSDI.date) = MONTH(RSD.date)
     AND YEAR(RSDI.date) = YEAR(RSD.date)) = MAX(date)
GROUP BY YEAR(date), MONTH(date)

But this just gives me an error and I can't think of any other way to do it. 但这只是给我一个错误,我想不出其他任何方法来做到这一点。

Does any one know what I need to do to achieve the result I am after? 有谁知道我需要做些什么才能达到我想要的结果?


I have many columns in my table, some need to be SUM(), AVG() and others I just need the last value of a given month. 我的表中有很多列,有些需要SUM(),AVG(),而另一些只需要给定月份的最后一个值。

Try this: 尝试这个:

SELECT SUM(prospectCount) 
FROM report_sales_day AS RSD 
INNER JOIN (SELECT userId, MAX(RSDI.date) AS `date`
                FROM report_sales_day AS RSDI
                WHERE MONTH(RSDI.date) = MONTH('2014-09-01') AND YEAR(RSDI.date) = YEAR('2014-09-01')
             ) AS A ON RSD.userId = A.userId AND RSD.date = A.date 
WHERE userId = 93 AND YEAR(RSD.date) = YEAR('2014-09-01') AND 
        MONTH(RSD.date) = MONTH('2014-09-01')
GROUP BY YEAR(RSD.date), MONTH(RSD.date)

I think your query should be like this. 我认为您的查询应该是这样的。 You have to use backticks around `date` 您必须在`date`附近使用反引号

SELECT SUM(prospectCount) FROM report_sales_day AS RSD
WHERE userId = 93
AND YEAR(`date`) = YEAR('2014-09-01')
AND MONTH(`date`) = MONTH('2014-09-01')
AND MAX(`date`) = (SELECT MAX(RSDI.date)
  FROM report_sales_day 
  WHERE MONTH(RSDI.date) = MONTH(RSD.date)
  AND YEAR(RSDI.date) = YEAR(RSD.date))
GROUP BY YEAR(`date`), MONTH(`date`)

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

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