Re: Update Current Row Based on Prior Row - Mailing list pgsql-novice

From Andreas Kretschmer
Subject Re: Update Current Row Based on Prior Row
Date
Msg-id 20120603073757.GA8740@tux
Whole thread Raw
In response to Update Current Row Based on Prior Row  (Philip Brooks <philswatch@yahoo.com>)
List pgsql-novice
Philip Brooks <philswatch@yahoo.com> wrote:

> I had what I thought was a simple update query.. and it has stumped me.
> I have a table ordered by a SERIAL named ROWID.
> In that table I have a column named TITLE.
> Where TITLE is null, I want to set it equal to the previous row's TITLE.
>
> In SQLite, I did it with this:
>
> UPDATE bf
> SET title = (
>   SELECT title
>   FROM bf AS prev
>   WHERE title IS NOT NULL AND prev.rowid < bf.rowid
>   ORDER BY prev.rowid DESC
>   LIMIT 1
> )
> WHERE title IS NULL
>
> The update is not porting to Postgresql.


Works for me:

test=# select * from bf order by rowid;
 rowid | title
-------+-------
     1 | row1
     2 |
     3 | row3
     4 | row4
     5 |
     6 |
     7 | row7
     8 | row8
(8 rows)

Time: 0,220 ms
test=*# update bf set title = (select title from bf as prev where title
is not null and prev.rowid < bf.rowid order by prev.rowid desc limit 1)
where title is null;
UPDATE 3
Time: 0,435 ms
test=*# select * from bf order by rowid;
 rowid | title
-------+-------
     1 | row1
     2 | row1
     3 | row3
     4 | row4
     5 | row4
     6 | row4
     7 | row7
     8 | row8
(8 rows)



Andreas
--
Really, I'm not out to destroy Microsoft. That will just be a completely
unintentional side effect.                              (Linus Torvalds)
"If I was god, I would recompile penguin with --enable-fly."   (unknown)
Kaufbach, Saxony, Germany, Europe.              N 51.05082°, E 13.56889°

pgsql-novice by date:

Previous
From: Tom Lane
Date:
Subject: Re: Update Current Row Based on Prior Row
Next
From: "Van Orden, Brad"
Date:
Subject: Re: database in different location owned by different user