webForumDet fria alternativet

Beräkning med samma attribut från olika rader

Databaser & SQL

1 svar · 237 visningar · startad av LiLLEN

Medlem sedan feb. 20038 inlägg
Frågan#1

Försöker ta värdet på diff minus värdet på samma attribut fast på nästa rad. Jag kom fram till den här queryn efter lite sökningar här i forumet, men den tar väldigt lång tid att utföra, runt en minut på en liten testdatabas med 2100 rader.

Finns det något effektivare sätt att utföra samma sak? jag använder PostgreSQL 8.1.3.

SELECT t.id, t.diff - (SELECT diff FROM tmpview t2 WHERE t2.id > t.id ORDER BY t2.id ASC LIMIT 1) AS nytt FROM tmpview t ORDER BY t.id ASC;

Hmm kom precis på att det kanske tar extra lång tid eftersom frågan ställs mot en vy.

Såhär skapas vyn:

CREATE VIEW tmpview AS SELECT t1.id AS id, (t4.ts-t1.ts-(t3.ts-t2.ts)) AS diff,
FROM projectname_t1 t1, projectname_t2 t2, projectname_t3 t3, projectname_t4 t4
WHERE t1.id = t2.id AND t1.id = t3.id AND t1.id = t4.id;

Medlem sedan feb. 20038 inlägg
#2

Gjorde om vyn till en temporär tabell istället och det löste hastighetsproblemet.

260 ms totalt · 4 externa anrop · v20260731065814-full.a51de22e
126 ms — deklarationer (db)
0 ms — hämta statistik (cache)
130 ms — hämta tråd, inlägg och bilagor (db)
116 ms — ändringar (db)