2011-02-15 58 views
0

我有SQL查詢到MySQL的問題採取各組中的最後一個記錄,並在一個query.i有一個表,總結一些領域:獲得最後一個記錄各組中,總結其中的一些

name  date interested made_call 
andrew.h 2011-02-04  10  10 
andrew.h 2011-02-11  20  10 
andrew.h 2011-02-13  2   10 
sasha.g 2011-02-11  5   20 
sasha.g 2011-02-12  5   1 

我需要按名稱將made_call列分組,然後返回感興趣的最後一條記錄。 這裏我理想中的結果得到:

name  date interested made_call 
andrew.h 2011-02-13  2   30 
sasha.g 2011-02-12  5   21 

我試圖讓這個查詢

SELECT a.name,a.date,a.interested,sum(made_call) as made_call 
FROM `resultboard` a 
WHERE a.attendence = 1 
AND NOT EXISTS (select 1 from resultboard where name = a.name 
     and id > a.id and attendence = 1) 
GROUP BY name 

結果,但是結果我得到了

andrew.h 2011-02-13  2   10 
    sasha.g 2011-02-12  5   1 

所以查詢因此未總和,只是返回組 幫助中的最後一條記錄)

回答

0

那可能是有點慢如果表是非常大的,但它會得到想要的結果:

SELECT a.name, t.date, a.interested, t.calls 
FROM resultboard a 
JOIN (SELECT name, MAX(date) AS date, SUM(made_call) AS calls FROM resultboard 
    GROUP BY name) AS t 
    ON a.name = t.name AND a.date = t.date 
0

我覺得用WITH彙總GROUP BY修飾符可以幫助你。 http://dev.mysql.com/doc/refman/5.0/en/group-by-modifiers.html

編輯;我得到了我錯了,沒有必要與ROLLUP

SELECT r.name, 
     MAX(r.date) as date, 
     (SELECT r2.interested FROM resultboard r2 WHERE r2.name = r.name ORDER BY r.date DESC LIMIT 1), 
     SUM(made_call) as made_call 
FROM resultboard r 
GROUP BY name; 
0

你的WHERE子句是消除所有,但考慮最後一行的總和的一部分。

在其他一些數據庫中,您可以使用LAST聚合函數。 MySQL沒有說,但你可以emulate it像這樣爲你的情況:

SELECT 
    a.name, 
    SUBSTRING_INDEX(
     GROUP_CONCAT(CAST(a.date AS CHAR) ORDER BY date desc), 
     ',', 1 
    ) AS date, 
    SUBSTRING_INDEX(
     GROUP_CONCAT(CAST(a.interested AS CHAR) ORDER BY date desc), 
     ',', 1 
    ) AS interested, 
    sum(made_call) as made_call 
FROM `resultboard` a 
WHERE a.attendence = 1 
GROUP BY name 

它可能不是快大型數據集,但如果我的研究是正確的,應該至少做的工作。我沒有測試過,所以YMMV。

相關問題