On Mon, 22 Mar 2010 04:40:50 +0200, Laimis wrote: > bala nemate rašė: > >> turiu lenta, kurioje fiksuojama, kada pasikeite yra irengimo busena >> (1-dirba, 0-stovi) ir laiko stampas. reikia susumuoti atidirbta laika (jei >> 1 atsistojo 12:12, o 0 - 12:20, skiasi pradirbta 8 minutes ir t.t.). galit >> gal ant kelio uzvesti, nuo ko pradeti aiskintis? >> >> misliju, uzklausoje reikia koki cikla prasukti ir persidelioti busenas is >> eiluciu i stulpus ir tada issirankioti datos skirtuma...(be ciklo turbut >> niekaip?) > > Na kodėl gi niekaip, gana paprastai: > > SELECT SUM(DATEDIFF(second, s.ts, e.ts)) > > FROM > (SELECT ts, ROW_NUMBER() OVER(ORDER BY ts) AS rn FROM > dbo.tdata WHERE status = 1) s > > INNER JOIN > > (SELECT ts, ROW_NUMBER() OVER(ORDER BY ts) AS rn FROM > dbo.tdata WHERE status = 0) e > > ON s.rn = e.rn > > > (lentelė 'tdata': 'status' -- būklė (0/1), ts -- laiko štampas) > > Ciklas galėtų patikrinti ar visi laiko momentai yra teisingi (jų > netrūksta, jie nuoseklūs), nors jei duomenų teisingumą garantuoja kitas > šaltinis, tai patikra galėtų būti nebent tik tokia: > > SELECT ts.cnt - te.cnt FROM > (SELECT COUNT(ts) AS cnt FROM tdata WHERE status = 0) te, > (SELECT COUNT(ts) AS cnt FROM tdata WHERE status = 1) ts aha. dekui labai. einu skaityti apie OVER ir Row_Number. -- bn/mj icq : 171288416 skype : bala.nemate "The blues ain't about making yourself feel better. it's about making other people feel worse." -- Bleeding Gums Murphy