The Diary
Дневникът на Георги
<- Сряда, 16 Февруари 2005 | Начална страница | Петък, 18 Февруари 2005 ->
Четвъртък, 17 Февруари 2005
13:20PostgreSQL е истината, хора. Как някои успяват да си свършат работа без 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 ]Коментари
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 ;(
Може друг път, това дето е сложено е тъпизъм и нищо не прави. Отделен е въпроса, че това не е ANSI съвместим SQL. mysql_moje освен това да си качи kirilitza
Disclaimer: Except where otherwise noted all opinions expressed here are personal
opinions of the author and do not reflect official opinions of my employer or
any other person, company or organization associated with the author.
Copyright: Except where otherwise noted the content of this site is licensed under a
Creative Commons Attribution License. Текстът на договора за ползване на български
Copyright (cc) 2003-2011 Georgi Chorbadzhiyski. Some rights reserved.
Comments, texts and pictures not signed by me are property of their respective owners.
Страницата е генерирана от Glog v3.99-test
Breiii
Написа Absolut на 17-Feb-2005 19:09