我正在實施一個基本的星型模式來爲我的公司提供購買報告。我們的事實表總結了4個維度,並且彙總了每日,每週,每月和每年的總計。PHP中簡單數據倉庫的日期之間的間隔
該代碼當前知道如何處理單日,數週,數月和數年的報表。下一步是實施任意日期範圍報告。提供一個範圍,目標是瞭解這兩個日期之間的總年數,月份,週數和天數,並拉到合適的記錄來計算總數。問題是我們需要確定兩個日期之間的每個整個粒度週期的計數,而不僅僅是經過的時間量。
例如,在'2009-06-29'和'2011-06-29'之間已經過了2年,但是我們需要知道這個範圍包括一整年(2010),十一個月(Jan- May/10 & Jul-Dec/09)和58天(Jun 1-29/09 & Jun 1-29/11)。
從這個結果中,我們可以從70個粒度週期中提取已經彙總的記錄,合併並呈現總計。
我一直在編寫測試代碼來確定將日期範圍分解爲其組成部分的最佳方式,但是由於我懷疑我正在過度使用此過程,因此我正在退後一步。目前的草案作爲:
- 填入「datesToParse」數組與初始日期範圍。
- 確定日期之間是否存在一個或多個滿年。
- 對於日期之間的每一年,從日期範圍中刪除該期間,並將該年份之前的「期間」和「期間之後」分爲兩個新的日期範圍。
- 在「datesToParse」堆棧上推送兩個新的日期範圍。
- 重複
- 當所有可能的幾年已經從「datesToParse」數組中刪除,重複上述過程數月,周,日。
理論上這應該遞歸地將初始日期範圍縮減爲全年,月,周和天的集合。
有沒有更好的方式來做到這一點?這看起來像是之前已經解決了很多次的問題。
你能不能簡單地選擇那個時期的所有聚合每日總數,並將它們加在SQL中? – liquorvicar