Solved

Microsoft Query Functions

Posted on 2010-11-07
12
437 Views
Last Modified: 2012-05-10
I have a pivot table based on an Access file of trucks weighing in and out of a facility. The data includes the time the truck weighs in, and then (after it is loaded or unloaded) the time it weighs out. I want to determine the elapsed time using MS Query and then return the data to Excel.

Here is a little bit of the data:

GTime      TTime      ElapsedTime
07:42      07:14      28
14:33      15:11      39
19:52      20:33      41
17:25      18:29      64
09:09      09:53      45
12:20      11:53      28

Does MS Query have built in date/time formats that I can use to create a calculated column like this:

(GTime - TTime) = Elapsed

or something like

timevalue(GTime) - timevalue(TTime) = Elapsed
 
I got it to work when I did this:

abs(left(GTime,2)*60+right(Gtime,2) - left(TTime,2)*60+right(TTime,2))

I am looking for information about time/date functions that are existing in MS Query. I have spent hours on Google trying to find The Definitive Guide to MS Query, but there does not appear to be any good reference material on it. Anyone know where such a book exists?

(One of you experts would make a ton of dough by writing a book like that.)

0
Comment
Question by:jkasavan
  • 5
  • 4
  • 3
12 Comments
 
LVL 37

Expert Comment

by:TommySzalapski
ID: 34081891
MS Query is based mostly on SQL and there are so many books out on that that I certainly couldn't write one worth anything.

The query should support datediff and n means minutes so abs(datediff("n", GTime, TTime)) should get you what you want. More datediff stuff here http://www.techonthenet.com/access/functions/date/datediff.php

If that doesn't do it for you, read on.
If your times are stored as strings, then there really isn't a much better way to do it than you have. If they are stored as numbers then they are stored in days so abs(GTime - TTime)*24*60 will give you the minutes.
0
 
LVL 44

Expert Comment

by:GRayL
ID: 34084950
There does not appear to be any correlation between the start and end times and your two GTime and TTime fields.  I would have expected one to be always greater than the other.  Do you ever have a situation where a before time is just before midnight and the loaded time is some time after midnight?
0
 
LVL 44

Accepted Solution

by:
GRayL earned 125 total points
ID: 34084994
If you had two variable TBefore and TAfter as the two times, both datetime datatypes, then you can get the difference by:

CDate(TAfter-TBefore)

which shows as hh:nn:ss
0
 
LVL 2

Author Comment

by:jkasavan
ID: 34089411
In the Access data source file, the Gtime and Ttime fields are text.

So this works:

abs((left(gtime,2)*60+right(gtime,2))-(left(ttime,2)*60+right(ttime,2)))

and so does this

abs(1440*(timevalue(gtime)-timevalue(ttime)))
0
 
LVL 37

Expert Comment

by:TommySzalapski
ID: 34089430
The cleanest solution would then probably be
abs(datediff("n", timevalue(GTime), timevalue(TTime)))
0
 
LVL 2

Author Comment

by:jkasavan
ID: 34089494
Cdate(timevalue(gtime)-timevalue(ttime)) gives:

1899-12-30 00:29:00
1899-12-30 00:37:00
1899-12-30 00:33:00
1899-12-30 00:34:00
1899-12-30 00:44:00

abs(datediff("n", GTime, TTime)) gives:

"Too few parameters, Expected 1."

0
How to improve team productivity

Quip adds documents, spreadsheets, and tasklists to your Slack experience
- Elevate ideas to Quip docs
- Share Quip docs in Slack
- Get notified of changes to your docs
- Available on iOS/Android/Desktop/Web
- Online/Offline

 
LVL 2

Author Comment

by:jkasavan
ID: 34089498
abs(datediff("n", timevalue(GTime), timevalue(TTime)))

also gives

"Too few parameters, Expected 1."
0
 
LVL 37

Expert Comment

by:TommySzalapski
ID: 34089644
Must be abs(datediff(minute, GTime, TTime))
or abs(datediff(minute, timevalue(GTime), timevalue(TTime)))
0
 
LVL 44

Expert Comment

by:GRayL
ID: 34095179
I'm running A2003 and do not get the 1899 date.  However you can get rid of it by wrapping with timeValue()

tb = time()
ta = time()+.1
? ta
14:54:12
? tb
12:29:28
?ta-tb
 0.100196759259259
? timevalue(cdate(ta-tb))
02:24:44
0
 
LVL 2

Author Closing Comment

by:jkasavan
ID: 34098392
I appreciate the assistance. Thanks very much.
0
 
LVL 2

Author Comment

by:jkasavan
ID: 34098394
Tommy - these

Must be abs(datediff(minute, GTime, TTime))
or abs(datediff(minute, timevalue(GTime), timevalue(TTime)))

both still yield

"Too few parameters. Expected 1."
0
 
LVL 44

Expert Comment

by:GRayL
ID: 34098736
Thanks, but why the B?  I explained away the 1899-2-30.
0

Featured Post

Top 6 Sources for Identifying Threat Actor TTPs

Understanding your enemy is essential. These six sources will help you identify the most popular threat actor tactics, techniques, and procedures (TTPs).

Join & Write a Comment

This tutorial explains how to create a series of drop-down lists that are dependent upon prior selections to guide (“force”) the user to make the correct selection and reduce data errors within Microsoft Excel. Excel 2010 was used for this tutorial;…
I see at least one EE question a week that pertains to using temporary tables in MS Access.  But surprisingly, I was unable to find a single article devoted solely to this topic. I don’t intend to describe all of the uses of temporary tables in t…
The viewer will learn how to simulate a series of sales calls dependent on a single skill level and learn how to simulate a series of sales calls dependent on two skill levels. Simulating Independent Sales Calls: Enter .75 into cell C2 – “skill leve…
The viewer will learn how to create two correlated normally distributed random variables in Excel, use a normal distribution to simulate the return on different levels of investment in each of the two funds over a period of ten years, and, create a …

758 members asked questions and received personalized solutions in the past 7 days.

Join the community of 500,000 technology professionals and ask your questions.

Join & Ask a Question

Need Help in Real-Time?

Connect with top rated Experts

24 Experts available now in Live!

Get 1:1 Help Now