Re: Fw: Clipping values

Lists: pgsql-general
From: Ovid <curtis_ovid_poe(at)yahoo(dot)com>
To: pgsql-general(at)postgresql(dot)org
Subject: Fw: Clipping values
Date: 2010-03-24 16:30:56
Message-ID: 859249.9789.qm@web65711.mail.ac4.yahoo.com
Views: Raw Message | Whole Thread | Download mbox | Resend email
Lists: pgsql-general

In response to a private email from someone else on this list, I thought I should send the following clarification.

I have a table with four values which are constantly lowered by user action. These four values must rise over time, in five minute intervals. The core of the function, in pseudo-code, would look something like this:

FOREACH row IN SELECT * FROM some_table WHERE some_percentages are less than 1
LOOP
new_percentage = num_intervals * .1 > 1
? 1
: num_intervals * .1;
UPDATE some_table SET some_percentages = new_percentage WHERE id = row.id
END LOOP

But, of course, doing that for four percentages (with at least one having a different increment value than .1)

Cheers,
Ovid


From: Tom Lane <tgl(at)sss(dot)pgh(dot)pa(dot)us>
To: Ovid <curtis_ovid_poe(at)yahoo(dot)com>
Cc: pgsql-general(at)postgresql(dot)org
Subject: Re: Fw: Clipping values
Date: 2010-03-24 16:40:28
Message-ID: 23671.1269448828@sss.pgh.pa.us
Views: Raw Message | Whole Thread | Download mbox | Resend email
Lists: pgsql-general

Ovid <curtis_ovid_poe(at)yahoo(dot)com> writes:
> I have a table with four values which are constantly lowered by user action. These four values must rise over time, in five minute intervals. The core of the function, in pseudo-code, would look something like this:

> FOREACH row IN SELECT * FROM some_table WHERE some_percentages are less than 1
> LOOP
> new_percentage = num_intervals * .1 > 1
> ? 1
> : num_intervals * .1;
> UPDATE some_table SET some_percentages = new_percentage WHERE id = row.id
> END LOOP

> But, of course, doing that for four percentages (with at least one having a different increment value than .1)

You could code that directly with CASE operations, but it would probably
be easier to use GREATEST/LEAST, along the lines of
new_percentage = LEAST(num_intervals * .1, 1);

regards, tom lane


From: Ovid <curtis_ovid_poe(at)yahoo(dot)com>
To: Tom Lane <tgl(at)sss(dot)pgh(dot)pa(dot)us>
Cc: pgsql-general(at)postgresql(dot)org
Subject: Re: Fw: Clipping values
Date: 2010-03-24 18:54:39
Message-ID: 972778.56617.qm@web65702.mail.ac4.yahoo.com
Views: Raw Message | Whole Thread | Download mbox | Resend email
Lists: pgsql-general

----- Original Message ----
> From: Tom Lane <tgl(at)sss(dot)pgh(dot)pa(dot)us>

> You could code that directly with CASE
> operations, but it would probably
> be easier to use GREATEST/LEAST, along the
> lines of
> new_percentage = LEAST(num_intervals * .1,
> 1);

Ah, I didn't know about the LEAST function! I love you (platonically, of course. My fiancée might have issues otherwise).

Cheers,
Ovid
--
Buy the book - http://www.oreilly.com/catalog/perlhks/
Tech blog - http://blogs.perl.org/users/ovid/
Twitter - http://twitter.com/OvidPerl
Official Perl 6 Wiki - http://www.perlfoundation.org/perl6