我目前正在处理将用于与共享点交接以运行报告的查询。我有一个查询,我知道将与Oracle合作,但是我工作的公司正在运行SQL Server 2005.计数历史报告的日期和时间
报告将执行的操作是让该人员能够选择任何日期和时间,计算该特定操作。问题在于时间戳存在很大差距(因为产品需要一点时间才能进入下一个操作)。日期类型是varchar,所以我使用子字符串来分析年,月,日和时间。我有sample data可用。
查看报告的人希望能够在这个时间和日期说出有多少单位通过此操作。
我知道这是令人困惑,让我知道如果你需要任何澄清。
这里是oracle语法
SELECT T3.PAYMENT_DATE, T3."Hr", T3."Min",
(SELECT COUNT(*)
FROM INVOICE_ARCHIVE T4
WHERE TO_NUMBER(TO_CHAR(T4.PAYMENT_DATE, 'MM')) <= T3."Hr"
AND TO_NUMBER(TO_CHAR(T4.PAYMENT_DATE, 'DD')) <= T3."Min") AS "NUM"
FROM(SELECT T1.PAYMENT_DATE, T2."Hr", T2."Min"
FROM (SELECT (FLOOR((LEVEL + 359)/60)) AS "Hr",
MOD((LEVEL + 359), 60) AS "Min"
FROM dual CONNECT BY LEVEL <= 961) T2, INVOICE_ARCHIVE T1
ORDER BY T1.PAYMENT_DATE, T2."Hr", T2."Min") T3
当他们想要查看每天/小时多少个,他们想要一个范围还是卷起到选定的时间?请提供原始表格样本(或适当的匿名版本),因为目前尚不清楚您的基本表格是什么。通过转换为varchar分离日期和时间的部分不是理想的解决方案 - 如果您有实际的日期类型,则有更好的方法可用。此外,您应该考虑使用CTE,而不是内联子选择(出于程序员性能原因,而不是编译器性能原因)。 – 2012-07-10 19:04:45
这是一个很好的问题,我很高兴你问。据我所知,他们会想要一个范围。该范围将在早上6点开始,并在任何时间结束。我们把所有的历史数据都放在另一张桌子上,但它只有一天的总和信息。我认为现在我们要采取的行动是编辑java代码以输入我们需要的数据(以每小时为单位)并将其导出到单独的表中,以便我们从一个表中提取所有信息;我们也希望这将是一个更快,更少的服务器税。 – 2012-07-11 16:03:13