Sorry for the generic title of the question, but I didn’t know how else to put it.. So here goes:
I have a single table that holds the following information:
computerName | userName | date | logOn | startUp
| | | |
ID_000000001 | NULL | 2012-08-14 08:00:00.000 | NULL | 1
ID_000000001 | NULL | 2012-08-15 09:00:00.000 | NULL | 0
ID_000000003 | user02 | 2012-08-15 19:00:00.000 | 1 | NULL
ID_000000004 | user02 | 2012-08-16 20:00:00.000 | 0 | NULL
computername and username are self-explanatory I suppose
logOn is 1 when the user logged on at the machine and 0 when he logged off.
startUp is 1 when the machine was turned on and 0 when it got turned off.
the other entry is alway NULL respectively since we can’t login and startup at the exact same time.
Now my task is: Find out which computers have been turned on the least amount of time over the last month (or any given amount of time, but for now let’s say one month) Is this even possible with SQL? <– Careful: I don’t need to know how many times a PC was turned on, but how many hours/minutes each computer was turned on over the given timespace
There’s two little problems as well:
We cannot say that the first entry of each computer is a 1 in the startUp column since the script that logs those events was installed recently and thus maybe a computer was already running when it started logging.
We cannot assume that if we order by date and only show the startUpcolumn that the entries will all be alternating 1’s and 0’s because if the computer is forced shut down by pulling the plug for example there won’t be a log for the shutdown and there could be two 1’s in a row.
EDIT: userName is of course NULL when startUp has a value, since turning on/shutting down doesn’t show which user did that.
In a stored procedure, with cursors and fetch loops.
And you use a temptable to store by computername the uptime.
I give you the main plan, I’ll let you see for the details in the TSQL guide.
Another link: a good example with TSQL Cursor.
You only need a select into your temptable to determine which one of the computers has been up the most time.