2

SQL Server にこの種のデータがあります

Person  StartDate                  EndDate                  Value
-----------------------------------------------------------------
38523   2013-01-10 22:00:00.000    2013-01-10 22:59:00.000  0.064
38523   2013-01-10 23:00:00.000    2013-01-10 23:59:00.000  0.065
38523   2013-01-12 00:00:00.000    2013-01-12 00:59:00.000  0.068
38523   2013-01-12 01:00:00.000    2013-01-12 01:59:00.000  0.069
38523   2013-01-12 02:00:00.000    2013-01-12 02:59:00.000  0.069
38523   2013-01-12 03:00:00.000    2013-01-12 03:59:00.000  0.069
38523   2013-01-31 23:00:00.000    2013-01-31 23:59:00.000  0.061
38523   2013-02-01 00:00:00.000    2013-02-01 00:59:00.000  0.064

連続する値を月ごとにグループ化する必要があります。前の終了日と次の開始日の間に 1 分以上のギャップがある場合は、別のグループに分割する必要があります。

期待される結果:

Person  StartDate                  EndDate                  Sum(Value)
----------------------------------------------------------------------
38523   2013-01-10 22:00:00.000    2013-01-10 23:59:00.000  0.129
38523   2013-01-12 00:00:00.000    2013-01-12 03:59:00.000  0.275
38523   2013-01-31 23:00:00.000    2013-01-31 23:59:00.000  0.061 (even though continuity exists, month was end hence separate record)
38523   2013-02-01 00:00:00.000    2013-02-01 00:59:00.000  0.064

どんな助けでも感謝します。

4

3 に答える 3

0
SELECT 
    CAST(DATEPART(YEAR, DateCreated) as varchar(10)) + '/' 
        + CAST(DATEPART(MONTH, DateCreated) as varchar(10))
FROM [Reporting].[dbo].[Hmis_Forms]
GROUP BY 
    CAST(DATEPART(YEAR, DateCreated) as varchar(10)) + '/' 
        + CAST(DATEPART(MONTH, DateCreated) as varchar(10))
于 2013-03-20T06:43:45.400 に答える
0

データと期待される結果に基づいて、次のクエリが役立つ場合があります。

SELECT 
    Person, 
    MIN(StartDate) as StartDate, 
    MAX(EndDate) as EndDate, 
    SUM(Value)
FROM table
GROUP BY 
    Person, 
    CAST(StartDate as date)
于 2013-03-20T07:13:42.077 に答える
0

私は似たようなものを持っています、多分これはあなたを助けることができます:

CREATE TABLE #Test2 
(
    Person int, 
    StartDate datetime, 
    EndDate datetime, 
    Value numeric (12, 3), 
    NextDate datetime
);


INSERT INTO #Test2(Person, StartDate, EndDate, Value, NextDate)
SELECT 
    Person, 
    StartDate, 
    EndDate, 
    Value, 
    (SELECT TOP 1 StartDate FROM Test WHERE StartDate > t.EndDate ORDER BY StartDate, EndDate)  
FROM Test t



SELECT 
    MAX(StartDate) ,
    MAX(EndDate) ,
    SUM(Value)


FROM #Test2
GROUP BY 
    DATEDIFF(MINUTE, NextDate, EndDate)

ORDER BY 
    MAX(StartDate) ,
    MAX(EndDate)    
DROP TABLE #Test2

私がやっていることは、次の開始日の値を保持する新しい列で一時テーブルを作成することです。次に、開始日と終了日の減算に基づいて値をグループ化し、分単位で数えました。

合計を除いて、結果と同じ行が得られます。

于 2013-03-20T08:36:26.897 に答える