Обсуждение: sql help, reusing a column

Поиск
Список
Период
Сортировка

sql help, reusing a column

От
Andy Colson
Дата:
Here is my query, which works:


select organization,
   state,
   (select max(idate) from times where customers.custid=times.custid and
taskid = 27) as lastdate,
   age( (select max(idate) from times where
customers.custid=times.custid and taskid = 27) )
from customers
order by lastdate desc nulls last;


I'd love to use age(lastdate) instead of age( (repeat sql) ), but it
does not seem to work.

I tried this:

select organization, state, max(idate), age(max(idate))
from customers
inner join times using(custid)
where taskid = 27
group by organization, state
order by idate desc nulls last;


but get error that times.idate must appear in group by or used in agg
func... except it is used in an agg func.


Any hints on what I'm missing?

Thanks,

-Andy

Re: sql help, reusing a column

От
Andy Colson
Дата:
On 4/29/2010 4:51 PM, Andy Colson wrote:
> I tried this:
>
> select organization, state, max(idate), age(max(idate))
> from customers
> inner join times using(custid)
> where taskid = 27
> group by organization, state
> order by idate desc nulls last;
>
>
> but get error that times.idate must appear in group by or used in agg
> func... except it is used in an agg func.
>
>
> Any hints on what I'm missing?
>
> Thanks,
>
> -Andy
>

Ahh, shoot, it was the idate in the order by, not the select list.  Both
"order by 3" and "order by max(idate)" work just fine.

Sorry for the noise... but still... I'm kinda curious, in my first
example, how you can re-use a column.  Is there a way to:

select organization, state,
  (select max(idate) from times where customers.custid=times.custid and
taskid = 27) as lastdate,
  age(lastdate)
from customers


-Andy

Re: sql help, reusing a column

От
Thomas Kellerer
Дата:
Andy Colson wrote on 29.04.2010 23:51:
> Here is my query, which works:
>
>
> select organization,
> state,
> (select max(idate) from times where customers.custid=times.custid and
> taskid = 27) as lastdate,
> age( (select max(idate) from times where customers.custid=times.custid
> and taskid = 27) )
> from customers
> order by lastdate desc nulls last;
>
>
> I'd love to use age(lastdate) instead of age( (repeat sql) ), but it
> does not seem to work.

This should work:

SELECT organization, state, lastdate, age(lastdate)
FROM (
   SELECT organization,
          state,
          (select max(idate) from times where customers.custid=times.custid and taskid = 27) as lastdate
   FROM customers
) t
order by lastdate desc


Re: sql help, reusing a column

От
Andy Colson
Дата:
On 04/29/2010 05:08 PM, Thomas Kellerer wrote:
> SELECT organization, state, lastdate, age(lastdate)
> FROM (
>    SELECT organization,
>           state,
>           (select max(idate) from times where
> customers.custid=times.custid and taskid = 27) as lastdate
>    FROM customers
> ) t
> order by lastdate desc

Ah, yes, that does work, very nice.  Thank you.

-Andy