need help averaging numbers.

  • here is my statement

    Select Top 4 DateDiff(n, [Sub Date],[Reply date]) as Minutes

    From SNFReportView Where ([SubDate] Is Not Null} and ([Reply date] Is Not Null) and (status <> 'ACK' and status <> 'Accepted' or status is null) order by [Sub Date] Desc

    so what is returning is 4 numbers taken from the bottom of the list. but what we want is the average of those, can you help us?

    thanks,

    matt

  • Try something like this:

    select avg(minutes) average_minutes from

    (Select Top 4 DateDiff(n, [Sub Date],[Reply date]) as Minutes

    From SNFReportView Where ([SubDate] Is Not Null} and ([Reply date] Is Not Null) and (status <> 'ACK' and status <> 'Accepted' or status is null) order by [Sub Date] Desc

    ) a

    Gregory Larsen, DBA

    If you looking for SQL Server Examples check out my website at http://www.geocities.com/sqlserverexamples

    Gregory A. Larsen, MVP

  • thanks,

    we will give that one a try

  • what is the " ) a" at the end of your statement?

  • That just associated a name, in this case "a" , with the record set return from the subquery (select top 4 ...). Without that you get an error.

    Gregory Larsen, DBA

    If you looking for SQL Server Examples check out my website at http://www.geocities.com/sqlserverexamples

    Gregory A. Larsen, MVP

  • no that didn't work for us sorry. go any other ideas?

  • this worked sorry, we just did it wrong. ok thanks again.

  • could you give a little more info on how the 'a' at the end works? i want to know whats going on with that.

    thanks

  • When you uses a SELECT statement in the from clause to create a record set you need to give the record set a name. Here is an example:

    select * from (select top 3 * from pubs.dbo.sales) a

    Here I have given the record set a name "a". Basically the record set is in memory, and SQL server needs a name to assocaited with the record set create by the command "select top 3 * from pubs.dbo.sales". If you don't give the record set a name SQL Server throws an error.

    Now if you wanted to return only a single column like qty, your code would quality the column name with an "a", like so "a.qty", instead of pubs.dbo.sales.qty. In fact qualifying the qty column with pubs.dbo.sales would get an error. Try the following two statements:

    select a.qty from (select top 3 * from pubs.dbo.sales order by qty desc) a

    select pubs.dbo.sales.qty from (select top 3 * from pubs.dbo.sales order by qty desc) a

    This first one works, and the second one gets you an error.

    Hope this explaination works. If not let me know.

    Gregory Larsen, DBA

    If you looking for SQL Server Examples check out my website at http://www.geocities.com/sqlserverexamples

    Gregory A. Larsen, MVP

  • select * from (select top 3 * from pubs.dbo.sales) a

    when i took off the a on this statment it put this in the place of 'a' = DERIVEDTBL

  • select qty from (select top 3 * from pubs.dbo.sales order by qty desc)

    works without the a. so i get the idea. in this case you wouldn't have to qualify?

  • What tool are you using to submit your commands? I'm using QA, and if you don't provide a name for the record set (DERIVEDTBL) produced by "select top 3 * from pubs.dbo.sales" then QA displays the following error:

    Server: Msg 170, Level 15, State 1, Line 1

    Line 1: Incorrect syntax near ')'.

    Gregory Larsen, DBA

    If you looking for SQL Server Examples check out my website at http://www.geocities.com/sqlserverexamples

    Gregory A. Larsen, MVP

  • i am using Enterprise Manager, that must be the reason!

Viewing 13 posts - 1 through 12 (of 12 total)

You must be logged in to reply to this topic. Login to reply