2014-09-05 54 views
0

我有一個每天每個用戶都有一行的表。在MySQL中選擇具有最高日期的行

我想按月份和年份分組以產生給定月份的摘要。

問題是,它是選擇第一行的值(即9月1日而非9月5日),這給了我錯誤的數字,因爲我想要列的最新運行總數。

我曾嘗試:

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) 

但這只是給了我一個錯誤,我想不出任何其他方式來做到這一點。

有沒有人知道我需要做什麼來實現我所追求的結果?我有很多列在我的表中,有些需要是SUM(),AVG()和其他我只需要給定月份的最後一個值。

+0

使用反引號周圍像''一年date'(\'日期\')'。 – 2014-09-05 07:20:57

+0

'ORDER BY date DESC LIMIT 0,1'? – 2014-09-05 07:24:01

回答

0

我認爲你的查詢應該是這樣的。你必須使用反引號圍繞'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`) 
1

試試這個:

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) 
+0

如何才能讓我的AVG和SUM列可以正常工作? – imperium2335 2014-09-05 07:34:03

+0

目前我有以下內容:AOV,averageMargin,averageMarginPercent,AER,enquiryToQuotes,quotesToJob,averageMarkupPercent和averageCloseTime – imperium2335 2014-09-05 07:56:30