Re: row number with in cursor

From: Kevin Duffy <kevind0718(at)gmail(dot)com>
To: Adrian Klaver <adrian(dot)klaver(at)aklaver(dot)com>
Cc: pgsql-sql(at)postgresql(dot)org
Subject: Re: row number with in cursor
Date: 2016-10-07 01:01:07
Message-ID: CAHCyeW07Z8eVfGVnVx-GmP5cM8OJ9ghyd8Q0ShxP2P9jhTsUYg@mail.gmail.com
Views: Raw Message | Whole Thread | Download mbox | Resend email
Thread:
Lists: pgsql-sql

The cursor is defined as follows:

currDR CURSOR (r character(15), sD date ) IS
select rate_key, rate_date, rate_value,
LAG(rate_date, 1 , null) OVER w as lag_r_date ,
LAG(rate_value, 1, null) Over w as lag_r_value ,
( LAG(rate_value, 1, null) Over w /100 * ( rate_date -
LAG(rate_date, 1 , null) OVER w ) ) / 360 as overnight_rate_return
from rate_quote
where rate_key = r and rate_date >= sD
WINDOW w as (PARTITION BY rate_key order by rate_date ROWS 1
PRECEDING )
order by 2 ;

Cursor works fine
Could I add a row number to the above?

KD

On Thu, Oct 6, 2016 at 8:26 PM, Adrian Klaver <adrian(dot)klaver(at)aklaver(dot)com>
wrote:

> On 10/06/2016 05:05 PM, Kevin Duffy wrote:
>
>> Hello All:
>>
>> I need your kind assistance, to learn if it is possible
>> within a cursor to know what row you are on.
>>
>
> What version of Postgres?
>
> Are you actually using a CURSOR as defined by plpgsql?:
>
> https://www.postgresql.org/docs/9.6/static/plpgsql-cursors.html
>
> Looks like you are LOOPing over the results of a function?
>
> Something like this:
>>
>> for currDateRate IN currDR( rate_in, start_date ) LOOP
>>
>> raise notice ' currDateRate.rate_date: %', currDateRate.rate_date ;
>> raise notice ' currDateRate.lag_r_value: %', currDateRate.lag_r_value ;
>> raise notice ' currDateRate.rate_value: %', currDateRate.rate_value ;
>> raise notice ' currDateRate.overnight_r: %',
>> currDateRate.overnight_rate_return ;
>> tr_index := tr_index *( 1+ currDateRate.overnight_rate_return ) ;
>> raise notice ' tr_index: %',tr_index ;
>> -- this does NOT work
>> raise notice ' row number %', currDateRate%ROWNUMBER ;
>>
>
> There is no ROWNUMBER in plpgsql(I am assuming you are using that?).
>
>
>> End LOOP;
>>
>> for testing purposes would like to break out after twenty records.
>> Yes I know I could do a simple counter like this:
>>
>> rtn_cnt := rtn_cnt +1;
>> if rtn_cnt >= 20 then
>> return rtn_cnt;
>> END IF;
>>
>
> I think you will need to use some variation of the above.
> Or add an argument to currDR(assuming it is a function) that sets a LIMIT.
>
>
>
>>
>> thamks for your attention to this matter
>>
>> KD
>>
>
>
> --
> Adrian Klaver
> adrian(dot)klaver(at)aklaver(dot)com
>

In response to

Responses

Browse pgsql-sql by date

  From Date Subject
Next Message Adrian Klaver 2016-10-07 01:21:40 Re: row number with in cursor
Previous Message Adrian Klaver 2016-10-07 00:26:55 Re: row number with in cursor