每小时的统计数据,我们有一个表,名字'employeeReg'与领域获取使用SQL
employeeNo | employeeName | Registered_on
这里Registered_on是时间戳。
我们需要一个小时的注册模式,在一段时间内。例如。
08年1月1日:12 - 01 PM:1592个注册
08年1月1日:01 - 下午2点:1020个注册
是否有人可以建议该查询。
我们使用Oracle 10gR2作为我们的数据库服务器。
每小时的统计数据,我们有一个表,名字'employeeReg'与领域获取使用SQL
employeeNo | employeeName | Registered_on
这里Registered_on是时间戳。
我们需要一个小时的注册模式,在一段时间内。例如。
08年1月1日:12 - 01 PM:1592个注册
08年1月1日:01 - 下午2点:1020个注册
是否有人可以建议该查询。
我们使用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;
您可能能够通过时隙来替换“1”的条目,或通过TO_CHAR()
表达;但是,出于向后兼容性的原因,这很可能会按照书面形式工作(但我无法在Oracle上验证您的身份 - 在IBM Informix Dynamic Server上使用EXTEND(Registered_on, YEAR TO HOUR)
代替TO_CHAR()
的等效工作正常)。
如果您随后决定在没有条目的情况下要零几小时出现,那么您将需要创建一个您希望报告的所有小时的列表,并且您需要做一个左外部连接与此查询的结果一起列出。困难的部分是生成正确的列表 - 不同的DBMS有不同的方式。
取得我想要的东西,与 :)
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');
喜乔纳森,遗憾的缺少。现在给了表名。 – 2008-12-22 06:42:00