MySQL每天返回最后一个值

时间:2015-06-20 15:19:31

标签: mysql

我有以下数据集:

+----+------------+-------+-------+
| ID |    Date    | Time  | Value |
+----+------------+-------+-------+
|  1 | 2015-01-01 | 14:00 |     1 |
|  2 | 2015-01-01 | 16:00 |     2 |
|  3 | 2015-01-02 | 14:00 |    15 |
|  3 | 2015-01-02 | 17:00 |    12 |
+----+------------+-------+-------+

现在我想返回每天的最后一个值,结果看起来应该是这样的:

+----+------------+-------+-------+
| ID |    Date    | Time  | Value |
+----+------------+-------+-------+
|  2 | 2015-01-01 | 16:00 |     2 |
|  3 | 2015-01-02 | 17:00 |    12 |
+----+------------+-------+-------+

我使用以下代码以某种方式提供了接近的结果:

SELECT DISTINCT     t.id,
                    t.date,
                    t.time,
                    t.balance
FROM db1 t
JOIN (
      SELECT MAX(tt.time) 'maxtime' 
      FROM db1 tt
      GROUP BY tt.date) m ON m.maxtime = t.time

现在返回大多数日期的所需最后一个值。但是,此代码还会提供一些不是最后一个值的随机行。

非常感谢你的帮助, 欢呼声

3 个答案:

答案 0 :(得分:2)

你很亲密。您只需要检查日期:

SELECT t.id, t.date, t.time, t.balance
FROM db1 t JOIN
     (SELECT tt.date, MAX(tt.time) as maxtime
      FROM db1 tt
      GROUP BY tt.date
     ) m
     ON m.maxtime = t.time AND m.date = t.date;
-------------------------------^
除非您认为两条记录可能具有完全相同的时间,否则

SELECT DISTINCT是没有必要的。

答案 1 :(得分:0)

您可以尝试下面的评论。在这里查看演示小提琴http://sqlfiddle.com/#!9/acbb2/4

SELECT              t.id,
                    t.date,
                    t.time,
                    t.`Value`
FROM db1 t
JOIN (
      SELECT `Date`, MAX(`time`) 'maxtime' 
      FROM db1
      GROUP BY `date`) m 
      ON m.maxtime = t.`time` 
      AND m.`Date` = t.`Date`;

答案 2 :(得分:0)

编辑:您是否将字段的日期和时间视为唯一?如果你还没有,你必须添加不同的。

我已经看到了其他答案,我认为你不需要加入它:

SELECT distinct t.date, t.time 
FROM table t 
WHERE t.`time` = (
    SELECT MAX(time)
    FROM table t2 
    WHERE t.date = t2.date
);

没有加入的效果

starting                        0.000036
Waiting for query cache lock    0.000006
checking query cache for query  0.000015
checking privileges on cached   0.000005
checking permissions            0.000011
checking permissions            0.000007
sending cached result to clien  0.000113
logging slow query              0.000007
cleaning up                     0.000005

加入表现

starting                        0.000036
Waiting for query cache lock    0.000006
checking query cache for query  0.000013
checking privileges on cached   0.000006
checking permissions            0.000011
checking permissions            0.000005
sending cached result to clien  0.000121
logging slow query              0.000007
cleaning up                     0.000005