MySQL - 查询帮助选择具有按日期分组的最新时间戳的结果

时间:2011-03-16 13:52:44

标签: mysql group-by

我有一个包含以下字段的表: 日期,时间,节点,结果 描述每天不同日期和时间的不同节点的一些数值结果。典型列表看起来像这样:

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中有一种简单的方法吗?

2 个答案:

答案 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

我认为聚合函数每个分组只返回一行。