Sql server SQL Server多行分组

Sql server SQL Server多行分组,sql-server,Sql Server,缩小一个大数据集的范围后,我得到了下表的输出。我正在使用SQLServer2008R2 ID RID Date Time 1001 1 02/05/2009 12:24:01 1001 2 02/05/2009 13:54:01 1002 3 14/04/2012 10:36:01 1002 4 21/03/2014 11:46:01 1002 5 21/03/2014 14:40:01 如果日期相同,然后有一

缩小一个大数据集的范围后,我得到了下表的输出。我正在使用SQLServer2008R2

ID      RID Date        Time
1001    1   02/05/2009  12:24:01
1001    2   02/05/2009  13:54:01
1002    3   14/04/2012  10:36:01
1002    4   21/03/2014  11:46:01
1002    5   21/03/2014  14:40:01
如果日期相同,然后有一个列出了所有时间的表(输出1),或者只有时间的日期和日期差异(输出2),我如何将日期分组在一起

我所能想到的就是使用光标,但我正试图避免这种情况

产出1

ID      Date        Time 1      Time 2
1001    02/05/2009  12:24:01    13:54:01
1002    21/03/2014  11:46:01    14:40:01
产出2

ID      Date        Time Diff
1001    02/05/2009  01:04:00
1002    21/03/2014  03:02:00

这是一个简单的分组:

Select ID, Date, Min(Time) As Time1, Max(Time) As Time2
From TableName
Group By ID, Date

Select ID, Date, Datediff(ss, Min(Time), Max(Time)) As Seconds,
       RIGHT('0' + CAST(Datediff(ss, Min(Time), Max(Time)) / 3600 AS VARCHAR),2) + ':' +
       RIGHT('0' + CAST((Datediff(ss, Min(Time), Max(Time)) / 60) % 60 AS VARCHAR),2)  + ':' +
       RIGHT('0' + CAST(Datediff(ss, Min(Time), Max(Time)) % 60 AS VARCHAR),2) As Time
From TableName
Group By ID, Date

这样的方法应该可以很好地工作:

CREATE TABLE test1 (
    id INT NOT NULL,
    rid INT NOT NULL,
    dt DATETIME NOT NULL
);

INSERT INTO dbo.test1
        ( id, rid, dt )
VALUES  
( 1001, 1, '02/may/2009 12:24:01'),
( 1001, 2, '02/may/2009 13:54:01'),
( 1002, 3, '14/apr/2012 10:36:01'),
( 1002, 4, '21/mar/2014 11:46:01'),
( 1002, 5, '21/mar/2014 14:40:01')

SELECT id, CAST(dt AS DATE), DATEDIFF(MINUTE, MAX(dt), MIN(dt))
FROM dbo.test1
GROUP BY id, CAST(dt AS DATE)

每行的最大次数是多少?很好,我没有想到最小和最大。