Beräkning med samma attribut från olika rader

Databaser & SQL

1 svar · 242 visningar · startad av LiLLEN

Medlem sedan feb. 20038 inlägg
Trådstart#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.

380 ms totalt · 4 externa anrop · v20260731065814-full.d34c6d5a
118 ms — deklarationer (db)
124 ms — hämta statistik (db)
129 ms — hämta tråd, inlägg och bilagor (db)
124 ms — ändringar (db)