我們有一張表,其中包含訂閱產品的狀態更新。訂閱開始時,表中會插入一條記錄,並且訂閱結束時該記錄會更新爲結束日期。我們的系統之一(不知道哪一個系統)有時會在「同一天下落\添加」結束訂閱,然後再次開始(創建新記錄)。因此,即使沒有真正改變,相同的訂戶ID也會附加到多個記錄。不包括同一天下降添加,同時保留真實的開始和結束日期
實例數據會是這樣:
recID subID start end prodtype
1 19 01/11/2001 01/15/2001 A
2 19 01/15/2001 01/16/2001 A
3 19 01/16/2001 01/20/2001 A
4 19 01/30/2001 01/31/2001 A
這傢伙開始在1/11和1/20上結束。記錄2和3被系統放入(當天下降添加,但不是真的)。記錄4是另一個訂閱19先生晚些時候開始。
我有一些代碼將嘗試解析每個不同的訂閱的第一個(真實的)記錄,但它不能找到真正的結束日期,而不使用max()和用戶分組。那當然會顯示兩個訂閱,1/11 - 1/31和1/30 - 1/31,這是錯誤的。
我撕裂了我的頭髮試圖解決這種模式下,以兩個記錄是這樣的:
subID start end prodtype
19 01/11/2001 01/20/2001 A
19 01/30/2001 01/31/2001 A
這是Teradata的,但它只是ANSI SQL,我相信。
存在使用會產生預期的結果窗口集合函數以及所述一個正確下文標識的溶液。如果我有時間,我也會盡力寫出來。 – 2012-02-13 15:01:41