首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >SQL -从早上6点到早上6点GroupByDay的最佳方式

SQL -从早上6点到早上6点GroupByDay的最佳方式
EN

Stack Overflow用户
提问于 2010-08-20 05:57:37
回答 2查看 542关注 0票数 1

我需要查询大量的行(包含一个时间戳列),并按天聚合结果。诀窍是我需要从早上6点到第二天早上6点对聚合函数进行分组,而不是从午夜到午夜。

显然,我可以执行某种"group by DATEPART(day,Timestamp-6小时)“,但是对于数百万行而言,这似乎会给服务器增加相当多的工作。实际上,它会使查询从几秒钟减慢到超过2分钟,并最终超时。

做这件事的更好的方法是什么?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2010-08-20 23:48:22

下面的T-SQL将在SQL Server中执行您想要的操作。但是,对于大量的行,性能不会很好,因为包装dt列的函数不能使用索引。出于性能方面的原因,您可以考虑向表中添加一个新的计算列来存储带有时间偏移量(-6小时)的日期。然后可以对这个新列进行索引,并且性能应该是好的。

如果存在(select * from sys.objects WHERE object_id = object_id(N'dbo.t')并键入(N'U'))

drop table dbo.t

创建表dbo.t (dt datetime not null)

插入到dbo.t值中('20100819 05:00')

插入到dbo.t值中('20100819 07:00')

插入到dbo.t值中('20100819 23:00')

插入到dbo.t值中('20100820 04:00')

插入到dbo.t值中('20100820 11:00')

插入到dbo.t值中('20100820 13:00')

插入到dbo.t值中('20100821 00:45')

选择convert(date,dateadd(HH,-6,dt))作为日期,

计数(Dt)作为计数

来自dbo.t

group by convert(date,date date(HH,-6,dt))

票数 1
EN

Stack Overflow用户

发布于 2010-08-20 06:03:23

你不能使用AT时区来调整午夜时间而不用昂贵的计算吗?

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/3526620

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档