如何选择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存储过程中执行此操作?
此致
答案 0 :(得分:1)
没有“最后”记录。您需要按顺序对它们进行排序,然后只选择最后一行。
/* SELECT ... */ ORDER BY sort_column DESC LIMIT 1
答案 1 :(得分: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
导致:
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
编辑:要获得Summed Group Total,您必须引入用户定义变量的使用。这是一个例子:
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
答案 2 :(得分: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