Just nu i M3-nätverket
Gå till innehåll

SQL-Fråga


BBBB

Rekommendera Poster

Hej!

Jag har en tabell med 2 kolumner (dDates,iValues).

Jag vill skriva en satts som kan utföra detta:

 

Jag skall kunna välja en totaltid ex.vis 7 dagar. Denna tid skall delas upp i ett antal lika långa interval, som t.ex. 6 min, 30 min, 24 timmar,.....,.

Under dessa interval skall iValues sumeras. Så om jag t.ex. väljer intervallet till 24 timmar, så skall det produceras 7 rader med en summa på varje rad som motsvarar summan av alla iValues under varje 24-timmars period.

 

Jag har testat detta men på detta sätt kan jag bara få det summerat per sek, minut, timme,dag...,. Jag vill ju kunna få det per 6min exmpelvis.

SELECT CONVERT(varchar(10), [dDates], 20) AS Expr1, SUM(iValues) AS Expr2

FROM ProdStat

WHERE ([dDates] BETWEEN '2004-08-30 09:53' AND DATEADD(dd, 7, '2004-08-30 09:53'))

GROUP BY CONVERT(varchar(10), [dDates], 20)

 

[inlägget ändrat 2005-03-14 12:00:21 av TTT]

Länk till kommentar
Dela på andra webbplatser

  • 1 month later...

Hej!

 

Ett förslag...

 

 

DECLARE @Start smalldatetime

DECLARE @End smalldatetime

DECLARE @strVal varchar(2)

DECLARE @intVal int

DECLARE @sSQL nvarchar(500)

Set @Start = getdate() /* Startdatum */

Set @End = getdate() + 6 /* Slutdatum */

Set @strVal = 'hh' /* Datumdel */

Set @intVal = 1 /* Värde */

SET NOCOUNT ON

CREATE TABLE #tmpDate

(

dDate smalldatetime,

iValue int

)

 

While @Start <= @End

Begin

Set @sSQL = 'Insert Into #tmpDate(dDate,iValue)' +

'(SELECT ''' + CONVERT(nvarchar(19),@Start,20) + ''', ' +

'SUM(iValues) FROM ProdStat WHERE (dDates BETWEEN ''' +

CONVERT(nvarchar(19),@Start,20) + ''' AND DateAdd(' + @strVal + ',' +

Cast(@intVal As nvarchar) + ',''' + CONVERT(nvarchar(19),@Start,20) + ''')))'

 

exec sp_executesql @sSql

 

Set @Start = Case @strVal

When 'mi' Then DateAdd(mi,@intVal,@Start)

When 'hh' Then DateAdd(hh,@intVal,@Start)

When 'd' Then DateAdd(dd,@intVal,@Start)

When 'wk' Then DateAdd(wk,@intVal,@Start)

When 'm' Then DateAdd(m,@intVal,@Start)

End

End

Select * From #tmpDate

SET NOCOUNT OFF

DROP Table #tmpDate

 

Som en Stored procedure...

 

CREATE PROCEDURE [pr_prodstat]

(@Start smalldatetime,

@End smalldatetime,

@strVal varchar(2),

@intVal int,

@sSQL nvarchar(500))

SET NOCOUNT ON

CREATE TABLE #tmpDate

(

dDate smalldatetime,

iValue int

)

 

While @Start <= @End

Begin

Set @sSQL = 'Insert Into #tmpDate(dDate,iValue)' +

'(SELECT ''' + CONVERT(nvarchar(19),@Start,20) + ''', ' +

'SUM(iValues) FROM ProdStat WHERE (dDates BETWEEN ''' +

CONVERT(nvarchar(19),@Start,20) + ''' AND DateAdd(' + @strVal + ',' +

Cast(@intVal As nvarchar) + ',''' + CONVERT(nvarchar(19),@Start,20) + ''')))'

 

exec sp_executesql @sSql

 

Set @Start = Case @strVal

When 'mi' Then DateAdd(mi,@intVal,@Start)

When 'hh' Then DateAdd(hh,@intVal,@Start)

When 'd' Then DateAdd(dd,@intVal,@Start)

When 'wk' Then DateAdd(wk,@intVal,@Start)

When 'm' Then DateAdd(m,@intVal,@Start)

End

End

Select * From #tmpDate

SET NOCOUNT OFF

DROP Table #tmpDate

Go

 

 

/PJ

 

Länk till kommentar
Dela på andra webbplatser

Arkiverat

Det här ämnet är nu arkiverat och är stängt för ytterligare svar.

×
×
  • Skapa nytt...