sql - 使用 SQL 获取每小时统计信息

标签 sql oracle oracle10g report

我们有一个表,名称为'employeeReg',其中包含字段

employeeNo | employeeName | Registered_on

这里 Registered_on 是一个时间戳。

我们要求在几天内每小时进行一次注册。例如。

01 Jan 08 : 12 - 01 PM : 1592 registrations

01 Jan 08 : 01 - 02 PM : 1020 registrations

有人可以为此提出查询建议吗。


我们使用 Oracle 10gR2 作为我们的数据库服务器。

最佳答案

这与关于 How to get the latest record for each day when there are multiple entries per day 的问题密切相关,但略有不同。 . (与很多很多 SQL 问题的共同点 - 表名最初没有给出!)

基本技术是找到一个函数来格式化各种 Registered_on 值,以便将特定小时内的所有条目组合在一起。这大概可以用 TO_CHAR() 来完成,因为我们正在处理 Oracle(MySQL 不支持这个)。

SELECT TO_CHAR(Registered_on, "YYYY-MM-DD HH24") AS TimeSlot,
       COUNT(*) AS Registrations
    FROM EmployeeReg
    GROUP BY 1
    ORDER BY 1;

您可以用 TimeSlot 或 TO_CHAR() 表达式替换“1”条目;但是,出于向后兼容性的原因,这很可能会像写的那样工作(但我无法在 Oracle 上为您验证这一点 - 等效项在 IBM Informix Dynamic Server 上使用 EXTEND(Registered_on, YEAR TO HOUR) 代替 TO_CHAR())。

如果您随后决定要在没有条目的小时内显示零,那么您将需要创建一个列表,列出您确实想要报告的所有小时数,并且您需要对该列表进行左外连接使用此查询的结果。困难的部分是生成正确的列表 - 不同的 DBMS 有不同的方法。

关于sql - 使用 SQL 获取每小时统计信息,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/385656/

相关文章:

c# - LINQ 和 SQL 注入(inject)

java - resultset.next() 循环中的打印语句不打印

database - Oracle 10.2.0.1.0 - 无效句柄

sql - 从字符串末尾删除字符

mysql - Where 子句匹配函数的结果

sql - 数据丢失的Sqoop导出

php5无法通过apache连接到oracle

java - Oracle 数据库可以向 Servlet 发送请求吗?

oracle - 为什么 Oracle 表/列/索引名称限制为 30 个字符?

database - Oracle Text - 索引 BLOB 字段(包含 PDF 数据)