我目前正在處理將用於與共享點交接以運行報告的查詢。我有一個查詢,我知道將與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