使用SQL获取小时统计信息

使用SQL获取小时统计信息,sql,oracle,oracle10g,report,Sql,Oracle,Oracle10g,Report,我们有一个名为“employeeReg”的表,其中包含字段 employeeNo | employeeName | Registered_on 这里是一个时间戳 我们要求每小时注册一次,为期几天。例如 1月08日:12-01下午:1592注册 1月8日01-02下午:1020次注册 请有人对此提出疑问 我们使用Oracle 10gR2作为我们的数据库服务器。这与有关的问题密切相关,但略有不同。(与许多SQL问题有一个共同点——最初没有给出表名!) 基本技术是找到一个函数,该函数将格式化不同的

我们有一个名为“employeeReg”的表,其中包含字段

employeeNo | employeeName | Registered_on
这里是一个时间戳

我们要求每小时注册一次,为期几天。例如

1月08日:12-01下午:1592注册

1月8日01-02下午:1020次注册

请有人对此提出疑问



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

这与有关的问题密切相关,但略有不同。(与许多SQL问题有一个共同点——最初没有给出表名!)

基本技术是找到一个函数,该函数将格式化不同的注册值,以便将特定小时内的所有条目分组在一起。这大概可以通过
TO_CHAR()
实现,因为我们正在处理Oracle(MySQL不支持此功能)

您可以用时隙或
to_CHAR()
表达式替换“1”项;但是,出于向后兼容性的原因,这很可能会按编写的方式工作(但我无法验证您在Oracle上是否可以使用
EXTEND(注册时间,从年到小时)
替代
TO_CHAR()
)在IBM Informix Dynamic Server上使用同等的工具工作正常)


如果您随后决定在没有条目的情况下,要在小时内显示零,则需要创建一个包含所有您确实希望报告的小时的列表,并且需要将该列表与此查询的结果进行左外联接。最困难的部分是生成正确的列表-不同的数据库管理系统有不同的方法来完成此操作。

实现了我想要的,使用:)


嗨,乔纳森,很抱歉错过了。我们已经给出了表名now.NP:这是一个基于回答大量SQL问题的扭曲观察。我已经适当地更新了答案——我保留了“一个共同点”的句子,但将其斜体化,并添加了“最初”。
SELECT TO_CHAR(Registered_on, "YYYY-MM-DD HH24") AS TimeSlot,
       COUNT(*) AS Registrations
    FROM EmployeeReg
    GROUP BY 1
    ORDER BY 1;
SELECT TO_CHAR(a.registered_on, 'DD-MON-YYYY HH24') AS TimeSlot,
       COUNT(*) AS Registrations
    FROM EmployeeReg a
    Group By TO_CHAR(a.registered_on, 'DD-MON-YYYY HH24');