Just nu i M3-nätverket
Jump to content

Beräkning av tid


thommyp

Recommended Posts

Hej!! Jag undrar om det är någon hejare på SQL som kan hjälpa mig skriva en sats för att plocka ut förfluten tid mellan 2 poster i en tabell. Databasen loggar när solen skiner på en solcell, är sedan tänk att räkna ut totala soltimmar för min "solfångare"

 

 

Jag har en tabell med ett antal fält som det loggas till.

 

när signalen blir (on) skrivs en post in med datumet och tiden i fältet (TimeDate) och i fältet (event) skriv siffran 5,

 

när sedan signalen blir (off) skrivs en ny post in med datumet och tiden i fältet (TimeDate) och i fältet (event) skriv siffran 4.

 

I basen ser det ut

 

ID TimeDate event

39 2003-01-01 08:20:00 5

39 2003-01-01 08:40:00 4

 

39 2003-02-01 08:20:00 5

39 2003-02-01 08:50:00 4

osv.

 

Det jag vill göra är att kolla förfluten tid mellan (event) 5 och (event) 4

 

Hur skriver jag den satsen???

 

[inlägget ändrat 2003-04-02 14:05:47 av thommyp]

Link to comment
Share on other sites

Använd DATEDIFF, typ:

 

SELECT

DATEDIFF(year, ondate, offdate) AS no_of_years,

DATEDIFF(month, ondate, offdate) AS no_of_months,

DATEDIFF(day, ondate, offdate) AS no_of_days,

DATEDIFF(hour, ondate, offdate) AS no_of_hours,

DATEDIFF(minute, ondate, offdate) AS no_of_minutes,

DATEDIFF(second, ondate, offdate) AS no_of_seconds

FROM table1

 

http://msdn.microsoft.com/library/default.asp?url=/library/en-us/sqlce/htm/_lce_datediff.asp

[inlägget ändrat 2003-04-02 14:36:08 av PlayerOne]

Link to comment
Share on other sites

Tack för ett snabbt svar PlayerOne

 

(DateDiff) använder jag, men problemet är att det

är flera hundra poster som finns i basen,

 

jag vill söka alla tider (paren) på en gång för att sedan lägga ihop dem..

 

 

[inlägget ändrat 2003-04-02 14:45:26 av thommyp]

Link to comment
Share on other sites

Ok, jag förstår... Kanske kan du använda dig av en CURSOR för att loopa igenom alla rader men problemet blir kanske då att veta vilka par av rader som hör ihop med varandra. Vad står ID för, vad är primärnyckel?

 

[inlägget ändrat 2003-04-02 14:53:58 av PlayerOne]

Link to comment
Share on other sites

Det finns mer än en "solfångare" därför har jag ID för att hålla ihop "paren". Ett fält som heter Count är primärnyckel.

 

 

[inlägget ändrat 2003-04-02 15:03:41 av thommyp]

Link to comment
Share on other sites

Magnus Gladh

Så här hade jag gjort.

 

I en SP som läst tabellen hade jag skapat en temptabell.

 

med följande kolumner.

 

ID|ID_Solfångare|TimeOn|TimeOff
---------------------------------
1|39|2003-01-01 08:00:00| 2003-01-01 09:30:00
2|32|2003-01-01 06:13:00| 2003-01-01 07:30:00
....

 

Du har en ID (som IDENTITY (1,1)) och sedan har du 3 kolumner, ID på solfångare, tid när den sattes på och tid när den stängdes av.

 

Sedan i din SP så skapar du en CURSOR som tar alla dina rader i din databas och loopar igenom dessa.

 

För varje rad som du får i din CURSOR så kollar du om det är event 5/4 är det 5=ON så skapas en ny rad i temptabellen och man fyller i SolfångarID och starttid.

 

När det sedan kommer en 4=OFF så tar man den post som har det högsta ID där ID_Solfångare är den solfångare som man vill kolla (svårt att förklara med du fattar säkert, inte sista posten, utan sista posten /solfångar id)

och så updaterar man TimeOff med tiden.

 

Sedan kan du ta DateDiff på dessa 2 kolumner och sedan SUM på alltihop så har du fått fram tiden.

 

- Magnus

-----------------------------------------------------

Jag är inte kaxig, jag är bara så jävla bäst...

 

Link to comment
Share on other sites

Tack Magnus..

 

Jag skulle bli mycket tacksam om du har möjlighet att skriva SQL koden för detta.. te.x för de "paren" där tiden för drift varit < 10 min för en av solfångarna ...

 

kolumner i tabellen [Digital Values] är

ID, TimeDate, Event

 

 

 

tackar på förhand

thommy

 

 

[inlägget ändrat 2003-04-03 10:04:44 av thommyp]

Link to comment
Share on other sites

Magnus Gladh

Sådan frågor måste du ställa mot den temptabell som din SP skapar.

 

Men om du vill ställa en mass olika frågor mot tabellen, så skall du skippa mitt förslag eftersom det blir långsamt när det är mycket data.

 

Då är det bättre att du bygger om din tabell (den du har nu) till att se ut som min TempTabell, och sätta in data så som jag beskrivet.

 

Du har du enkelt lagrad för att ställa sådanfrågor som du vill.

 

- Magnus

-----------------------------------------------------

Jag är inte kaxig, jag är bara så jävla bäst...

 

Link to comment
Share on other sites

Okey.. tack Magnus för hjälpen. Skall testa detta..

 

 

[inlägget ändrat 2003-04-04 11:23:04 av thommyp]

Link to comment
Share on other sites

Archived

This topic is now archived and is closed to further replies.



×
×
  • Create New...