如何解决TSQL计算每天发生的次数
| 我有一张桌子,用于注册网站访问者。我想计算每天有多少人访问了我的网站。 我的问题是,我无法弄清楚如何对datetime值进行类型转换,以便在进行不同计数时不会使用整个日期字段。 谁能解释一下?解决方法
SELECT
DateWithNoTimePortion = DateAdd(Day,DateDiff(Day,\'19000101\',DateCol),\'19000101\'),VisitorCount = Count(*)
FROM Log
GROUP BY DateDiff(Day,DateCol);
由于某种原因,我认为您正在使用SQL Server。如果那不是真的,请告诉我们。我认为DateDiff
方法可能会在其他DBMS中为您服务,具体取决于它们所支持的功能,但是它们可能有更好的方法来完成工作(例如Oracle中的ѭ2))。
在SQL Server中,上述方法是完成这项工作的最快方法之一。只有两种更快的方法:
内在int
转换舍入:
Convert(datetime,Convert(int,DateCol - \'12:00:00.003\'))
如果使用的是SQL Server 2008及更高版本,则这是最快的(如果您拥有的则应使用):
Convert(date,DateCol)
当SQL Server 2008不可用时,我认为我发布的方法是速度和清晰度的最佳组合,以供将来的开发人员查看代码,避免做不清楚的魔术工作。您可以看到测试证明了我的速度要求。
, 我会使用Group By方法(已由@Erik作为答案发布)
但是,您也可以使用OVER和Partition By来完成此任务。
SELECT
DISTINCT CONVERT(Date,VisitDate),COUNT(*) OVER (PARTITION BY CONVERT(Date,VisitDate)) as Visitors -- Convert Datetime to Date
FROM
MyLogTable
ORDER BY
CONVERT(Date,VisitDate)
在这种情况下,它有助于将DateTime转换为Date。
这没有@Erik的解决方案有效。但是,学习该方法是一个好主意,因为您可以使用Over
和Partition By
进行某些操作,而这些操作是Group By无法完成的(至少,效率不高)。话虽这么说,这可能对您的情况有些过分。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。