2013-03-16 36 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

相关问题