2013-03-16 39 views
2

如何選擇MySQL中多行的最後一個值?如何獲取mysql中多行的最後一個值?

從table1中選擇名稱,日期,值;

Name Date    Value 
A  01-Jan-2013   3 
A  02-Jan-2013   4 
B  04-Jan-2013   2 
B  05-Jan-2013   8 

結果我需要:

Name Date    Value 
A  01-Jan-2013   3 
A  02-Jan-2013   4 
     Last_value   4 
B  04-Jan-2013   2 
B  05-Jan-2013   8 
     Last_value   8 

如何做到這一點在MySQL存儲過程?

Regards

回答

1

沒有「最後」記錄。您需要按照它們應該排序的列對它們進行排序,然後只選擇最後一行。

/* SELECT ... */ ORDER BY sort_column DESC LIMIT 1 
0

您可以使用內部連接選擇MAX值。但是你沒有指定你的主鍵列。

SELECT 
    m.* 
FROM mytable AS m 
    INNER JOIN (SELECT 
     MAX(primary_key_column) 
      FROM mytable 
      GROUP BY Name) AS l 
    ON l.primary_key_column = m.primary_key_column 
+0

[SQL] SELECT米FROM MYTABLE * AS米INNER JOIN(SELECT MAX(ID)FROM MYTABLE GROUP BY名稱)AS升ON l.id。 = m.id [Err] 1054 - 'on子句'中的未知列'l.id' – 2013-03-16 02:22:26

1

這似乎更適合您的表示層,但可以使用SQL編寫它。像這樣的東西應該工作使用UNION ALL每組返回最後一個記錄:

SELECT Name, Dt, Value 
FROM (
    SELECT Name, Dt, Value, Name Name2 
    FROM YourTable 
    UNION ALL 
    SELECT '' Name, 'Last_Value', T.Value, T.Name Name2 
    FROM YourTable T 
     JOIN (
     SELECT Name, MAX(dt) MaxDt 
     FROM YourTable 
     GROUP BY Name 
     ) T2 ON T.Name = T2.Name AND T.dt = T2.MaxDt 
    ORDER BY Name2, Dt, Value 
) t 

SQL Fiddle Demo

結果造成:

NAME   DT      VALUE 
A   2013-01-01 00:00:00  3 
A   2013-01-02 00:00:00  4 
      Last_Value    4 
B   2013-01-04 00:00:00  2 
B   2013-01-05 00:00:00  8 
      Last_Value    8 

編輯:爲了得到總結集團總,你必須介紹使用用戶定義的變量。下面是一個例子:

SELECT Name, Dt, IF(Name='',summedTotal,Value) Value 
FROM (
    SELECT @summedTotal:=IF(@prevRow=Name,@summedTotal+Value,Value) summedTotal, 
    Name, Dt, Value, Name Name2, 
    @prevRow:=Name 
    FROM YourTable 
    JOIN (SELECT @summedTotal:=0) t 
    UNION ALL 
    SELECT summedTotal, '' Name, 'Last_Value', T.Value, T.Name Name2, pr 
    FROM (
     SELECT @summedTotal:=IF(@prevRow=Name,@summedTotal+Value,Value) summedTotal, 
     Name, Dt, Value, Name Name2, 
     @prevRow:=Name pr 
     FROM YourTable 
     JOIN (SELECT @summedTotal:=0) t 
    ) T 
    JOIN (
     SELECT Name, MAX(dt) MaxDt 
     FROM YourTable 
     GROUP BY Name 
    ) T2 ON T.Name = T2.Name AND T.dt = T2.MaxDt 
    ORDER BY Name2, Dt, Value 
) t 

而更SQL Fiddle

+0

如何求小計? – 2013-03-16 02:32:21

+0

@DnakkJam - 你正在尋找每個小組的小計?這與上面的介紹不同,需要使用用戶定義的變量。 – sgeddes 2013-03-16 02:34:37

+0

是的正確,小計每個組。怎麼做 ?謝謝你... – 2013-03-16 02:36:09

相關問題