Just nu i M3-nätverket
Jump to content

SQL-Fråga


BBBB

Recommended Posts

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]

Link to comment
Share on other sites

  • 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

 

Link to comment
Share on other sites

Archived

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



×
×
  • Create New...