我有以下数据集:
+----+------------+-------+-------+
| 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
现在返回大多数日期的所需最后一个值。但是,此代码还会提供一些不是最后一个值的随机行。
非常感谢你的帮助, 欢呼声
答案 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