SQL查询 - 为指定时间段内的每个日期选择最后记录的值

时间:2014-11-27 16:03:58

标签: database date select max ms-access-2010

有人可以帮助我解决我的问题,即在特定时间段内特定方框(1或2)每天获得最后记录的余额。

例如,我的表格如下:

表名:TestTable Date Time Location Box Balance 20.10.2014. 06:00:00 1 1 345 20.10.2014. 12:00:00 1 1 7356 20.10.2014. 18:45:00 1 1 5678 20.10.2014. 23:54:00 1 1 9845 20.10.2014. 06:00:02 1 2 35 20.10.2014. 12:00:04 1 2 756 20.10.2014. 18:45:06 1 2 578 20.10.2014. 23:54:10 1 2 845 21.10.2014. 06:00:00 1 1 34 21.10.2014. 12:05:03 1 1 5789 21.10.2014. 15:00:34 1 1 1237 21.10.2014. 06:00:00 1 2 374 21.10.2014. 12:05:03 1 2 54789 21.10.2014. 15:00:34 1 2 13237 22.10.2014. 06:00:00 1 1 8562 22.10.2014. 10:00:00 1 1 1234 22.10.2014. 17:03:45 1 1 3415 22.10.2014. 22:00:00 1 1 6742 22.10.2014. 06:00:05 1 2 562 22.10.2014. 10:00:16 1 2 123 22.10.2014. 17:03:50 1 2 415 22.10.2014. 22:00:10 1 2 642 23.10.2014. 06:00:00 1 1 9876 23.10.2014. 09:13:00 1 1 223 23.10.2014. 13:50:17 1 1 7768 23.10.2014. 19:47:40 1 1 3456 23.10.2014. 21:30:00 1 1 789 23.10.2014. 23:57:12 1 1 25 23.10.2014. 06:00:07 1 2 976 23.10.2014. 09:13:45 1 2 223 23.10.2014. 13:50:40 1 2 78 23.10.2014. 19:47:55 1 2 346 23.10.2014. 21:30:03 1 2 89 23.10.2014. 23:57:18 1 2 25 24.10.2014. 06:00:55 1 1 346 24.10.2014. 12:30:22 1 1 8329 24.10.2014. 23:50:19 1 1 2225 24.10.2014. 06:01:00 1 2 3546 24.10.2014. 12:30:26 1 2 89 24.10.2014. 23:51:10 1 2 25 ...

我们说时间是21.10.2014。 - 2014年10月23日。我希望每天都能获得方框1的最后记录余额。 结果应如下所示:

Date Time Location Box Balance 21.10.2014. 15:00:34 1 1 1237 22.10.2014. 22:00:00 1 1 6742 23.10.2014. 23:57:12 1 1 25

到目前为止,我已设法编写一个查询,只给我一个日期(整个表中的时间最长的日期)的余额,但我需要在特定时间段内的每个日期保持平衡。

我的错误代码: SELECT TestTable.[Date], TestTable.[Time], TestTable.[Location], TestTable.[Box], TestTable.[Balance] FROM TestTable WHERE Time=(SELECT MAX(Time) FROM TestTable WHERE Location=1 AND Box=1 );

请记住,我是非常新的。

TNX!

2 个答案:

答案 0 :(得分:0)

您正在寻找的是GROUP BY语句并稍稍移动您的MAX:

SELECT TestTable.[Date], MAX(TestTable.[Time]), TestTable.[Location],TestTable.[Box], 
TestTable.[Balance] FROM TestTable WHERE Location=1 AND Box=1 GROUP BY TestTable.[Date];

您还想选择某个时间段,我不熟悉您在表格中使用日期格式,但您会明白这一点:

SELECT ... WHERE TestTable.[Date] BETWEEN '21.10.2014.' AND '23.10.2014.';

答案 1 :(得分:0)

两件事 -

首先,在添加另一个FROM子句之前,不需要再次添加WHERE。 (除非你使用子查询,但这是另外一件事)。你会这样做 -

FROM MyTable
WHERE condition1 AND condition2 AND condition3

其次,如果您想要每个日期的MAX时间,只需添加GROUP BY即可。

GROUP BY Date 

这意味着它会显示每个日期的MAX时间。


SELECT 
Date, 
MAX(Time) AS LastTime, 
Balance
FROM 
TestTable   
WHERE Location=1 AND Box=1 
GROUP BY Date 
ORDER BY Date 

这会显示Date,即当天的最后一次(MAX(Time))以及该条目的余额。