当前位置: 代码迷 >> Sql Server >> datetime怎么 group by 每3个小时
  详细解决方案

datetime怎么 group by 每3个小时

热度:12   发布时间:2016-04-24 09:02:45.0
datetime如何 group by 每3个小时?
datetime如何 group by 每3个小时?

sqlite里怎么写?或者sqlserver 怎么写?或者 mysql怎么写?
------解决思路----------------------
USE AdventureWorks2012;
GO
SELECT 
                datepart(year,TH.TransactionDate)     as 'year'
            ,   datepart(month,TH.TransactionDate)   as 'month'
            ,   datepart(day,TH.TransactionDate)   as 'day'
            ,   ceiling((datepart(hour,TH.TransactionDate)+2)/3)   as 'interval'
            ,  SUM(TH.ActualCost) 
    FROM Production.TransactionHistory TH 
GROUP BY 
    datepart(year,TH.TransactionDate)
,   datepart(month,TH.TransactionDate)
,   datepart(day,TH.TransactionDate)
,   ceiling((datepart(hour,TH.TransactionDate)+2)/3)
order by 1,2,3,4

------解决思路----------------------
group by datediff(hh,time,'定一个起点时间')/3
看下下面的结果就明白了。
select datediff(hh,'2015-05-30 1:00:00','2015-05-30')/3
select datediff(hh,'2015-05-30 3:00:00','2015-05-30')/3
select datediff(hh,'2015-05-30 5:00:00','2015-05-30')/3
select datediff(hh,'2015-05-30 7:00:00','2015-05-30')/3
------解决思路----------------------

  declare @tab table(opdate smalldatetime,val int)
  insert into @tab
  select '2015-05-30 15:09:43',5 
  union all   select '2015-05-30 10:09:43',15 
  union all   select '2015-05-29 10:09:43',15 
  union all   select '2015-05-30 22:09:43',15 
 
 select sum(val) 合計,convert(varchar(10),opdate,111) as 日期 ,datepart(hh,opdate)/3 分段
 from @tab
 group by convert(varchar(10),opdate,111),datepart(hh,opdate)/3
   
  相关解决方案