は多分これをアーカイブするための別のアプローチがありますが、鉱山は、以下の通りである: -
デモ: -
DDL & DML
Create table Test (
[Date] date ,
[time] time(7),
col1 char (1),
col2 char (1) ,
col3 char(1)
)
go
insert into Test values ('02/02/2017' , '1:15' , 'a' , 'b' , 'c')
insert into Test values ('02/02/2017' , '1:35' , 'w' , 'e' , 'r')
insert into Test values ('02/02/2017' , '2:16' , 'q' , 'w' , 'e')
insert into Test values ('02/02/2017' , '3:48' , 'z' , 'x' , 'c')
insert into Test values ('02/02/2017' , '3:58' , 'b' , 'n' , 'm')
go
select * from Test
結果: -
クエリ
select [Date] ,
dateadd(minute,abs(datepart(minute,[time]) - 60),[time]) as [time],
col1 , col2 , col3
from test
where
datepart(hour,[time])
in
(
select
datepart(hour,[time])
from Test
group by datepart(hour,[time])
)
AND
abs(datepart(minute,[time]) - 60)
in
(
select
min(abs(datepart(minute,[time]) - 60))
from Test
group by datepart(hour,[time])
)
結果: - :
;WITH CTE AS
(
SELECT [Date],
DATEADD(MINUTE, 60 - DATEPART(MINUTE, [time]), [time]) [Time],
col1,
col2,
col3,
ROW_NUMBER() OVER(PARTITION BY DATEPART(HOUR, [time]) ORDER BY Date, Time DESC) rn
FROM Test
)
SELECT CASE WHEN [Time] = '00:00:00' THEN DATEADD(DAY, 1, [Date]) ELSE [Date] END [Date],
[Time],
col1,
col2,
col3
FROM CTE
WHERE rn = 1
結果
時刻列のデータ型と、使用しているSQL Serverのバージョンは何ですか? –
@ZoharPeledデータ型はtime(7)で、SQL Server 2014 Management Studio(12。0) – user7409370