1

Microsoft SQL Server 2008に、合計する必要のあるデータがあります。キャッチは、合計を24時間ごとにグループ化する必要があることです。24時間は、ある日の午後3時から翌日の午後3時までです。

例えば

DateExited、Value

2012年1月1日15:00、5

2012年1月1日15:04、6

2012年1月1日17:00、7

2012年1月2日00:00、-5

2012年1月2日09:00、10

2012年1月2日15:00、31

その合計は54になるはずです。次のクエリがありますが、午後3時から午後3時ではなく、深夜から深夜まですべてがグループ化されます。

SELECT dateadd(day,datediff(day,0, dateadd(hh, 0, DateExited) ),0) As SummaryDate, SUM(Value) as s1
FROM Test
where DateExited BETWEEN dateadd(year,datediff(year,0,GETDATE()),0) AND GetDate()
GROUP BY dateadd(day,datediff(day,0, dateadd(hh, 0, DateExited) ),0)
ORDER BY SummaryDate
4

4 に答える 4

1

日付/時刻の値から15時間を引くと、探している結果が得られます。

また、SQL 2008では、日を0に追加する代わりに、日時を日付に変換できます。

SELECT CONVERT(DATE, DATEADD(hour, -15, DateExited)) As SummaryDate, SUM(Value) as s1
FROM Test
WHERE DATEADD(hour, -15, DateExited) BETWEEN @StartDate AND @EndDate
GROUP BY CONVERT(DATE, DATEADD(hour, -15, DateExited))
ORDER BY SummaryDate
于 2012-06-05T16:15:04.130 に答える
1

マイナス15時間を加算して、結果を現在までにキャストできます。

select  cast(dateadd(hour,-15,'2012-05-06 14:30') as date) -- 2012-05-05
select  cast(dateadd(hour,-15,'2012-05-06 15:30') as date) -- 2012-05-06

あなたに好きなものを与えるgroup by

group by cast(dateadd(hour,-15,'2012-05-06 03:30') as date)
于 2012-06-05T16:16:45.863 に答える
0

最も簡単な方法は、これまでにキャストすることです。

SELECT cast(SummaryDate as date), SUM(Value) as s1
FROM Test
where DateExited BETWEEN dateadd(year,datediff(year,0,GETDATE()),0) AND GetDate()
GROUP BY cast(SummaryDate as date)
ORDER BY 1
于 2012-06-05T16:14:12.510 に答える
0

日付入力パラメーターを指定して、必要な値を返す関数を作成できます。

SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO

CREATE FUNCTION GetValueSum 
(
    @StartDate DATETIME
)
RETURNS INT
AS
BEGIN
DECLARE @ValueSum INT
DECLARE @StartDateTime DATETIME
DECLARE @EndDateTime DATETIME

-- Set the starting time to 3 PM on the datetime sent in:
SET @StartDateTime = DATEADD(hh, 15, CAST(CAST(@StartDate AS DATETIME) AS DATETIME))

-- Set the end time to one day later, minus 3 milliseconds (this smallest unit sql server can use)
SET @EndDateTime = DATEADD(ms, -3, DATEADD(dd, 1, @StartDateTime))

SELECT @ValueSum = SUM(Value)
FROM dbo.test
WHERE DateExited BETWEEN @StartDateTime AND @EndDateTime

RETURN @ValueSum

END
GO
于 2012-06-05T16:32:13.893 に答える