< HomePage | Снимки
<- Сряда, 16 Февруари 2005 | Начална страница | Петък, 18 Февруари 2005 ->
Четвъртък, 17 Февруари 2005
13:20

PostgreSQL е истината, хора. Как някои успяват да си свършат работа без views, triggers, stored procedures, RI и sub-queries изобщо не ми е ясно. Днес ми се появи проста задачка - в една таблица поле трябва да се пренесе в друго на *следващият* ред, а на последният ред да се сложи нещо по мой избор. Става дума в случая за пренасяне на дати, за да мога да извадя разликата между това кога е въведена стойността и кога последно е обновявана.

Първоначално препсувах на ум, защото си мислех, че ще трябва да пиша нещо, я на perl, я на PHP, което да обиколи таблицата, да запомня предишен ред и да прехвърля стойността в следващият (дотук една заявка, цикъл + още една за всеки ред), обаче после се замислих дали пък не може да се направи с една проста заявка.

Оказа се, че може, става и дори работи много добре. Ето решението до което стигнах:

UPDATE status SET
  active_ts = coalesce(
    (SELECT ts FROM status s2 WHERE s2.obj = status.obj AND s2.ts > status.ts LIMIT 1),
     abstime(CURRENT_TIMESTAMP)::int
  );

ts е датата и часът при вмъкване реда. В момента active_ts при всяко обновяване на реда чрез тригер се прави на текущите дата и час, но без еднократното обновяване, нямаше да имам попълнен active_ts на над 120 хиляди записа (active_ts го добавих днес като поле).

[ Коментари: 3 ]
Коментари

Breiii

Написа Absolut на 17-Feb-2005 19:09


mysql naistina moje da napravi podobno ne6to, osven ako ne sum razbral greshno zadachkata ;)

update testa set dst_ip=(@a:=dst_ip),dst_ip=@b,dst_ip=coalesce(((@b:=@a) AND NULL),dst_ip);

query-to ne e mnogo izchisteno prosto primer(i moi test). Inache postgres sigurno(sus sigurnost) e po bogat(ne sum go probval, a trqbva). Komentara ne beshe za tuk mai ;(

Написа mysql_moje на 22-Feb-2005 18:06


Може друг път, това дето е сложено е тъпизъм и нищо не прави. Отделен е въпроса, че това не е ANSI съвместим SQL. mysql_moje освен това да си качи kirilitza

Написа Георги Чорбаджийски (www) на 22-Feb-2005 20:16