我有一个包含以下字段的表: 日期,时间,节点,结果 描述每天不同日期和时间的不同节点的一些数值结果。典型列表看起来像这样:
date | time | node | result
----------------------------------
2011-03-01 | 10:02 | A | 10
2011-03-01 | 11:02 | A | 20
2011-03-02 | 03:13 | A | 23
2011-03-02 | 12:15 | A | 18
2011-03-02 | 13:15 | A | 8
2011-03-01 | 13:12 | B | 2
2011-03-01 | 14:26 | B | 1
2011-03-02 | 08:00 | B | 6
2011-03-02 | 07:22 | B | 3
2011-03-02 | 21:19 | B | 4
我想形成一个查询,它将获得每个节点每天的最后结果,这样我就会得到这样的结果:
date | time | node | latest
-----------------------------------
2011-03-01 | 11:02 | A | 20
2011-03-01 | 14:26 | B | 1
2011-03-02 | 13:15 | A | 8
2011-03-02 | 21:19 | B | 4
我考虑过做group by date, node
,但是后来提取最后一个值是一团糟(我使用group_concat( result order by time )
并使用SUBSTRING()
来获取最后一个值。呸,我知道)。在mysql中有一种简单的方法吗?
答案 0 :(得分:3)
我很确定我看到一个类似的请求,在没有使用INNER JOIN
的情况下解决它非常好但是我现在找不到它(它可能是SQL Server)但是接下来应该可以工作。 / p>
SELECT n.*
FROM Nodes n
INNER JOIN (
SELECT MAX(time) AS Time
, Date
, Node
FROM Nodes
GROUP BY
Date
, Node
) nm ON nm.time = n.time
AND nm.Date = n.Date
AND nm.Node = n.Node
答案 1 :(得分:1)
我认为你必须使用类似Max()函数的东西。对不起,我没有mysql,所以我无法测试,但我会想到这样的事情
select t.date, t.node, t.latest, Max(time) from Table t Group By t.node, t.date
我认为聚合函数每个分组只返回一行。