2015-07-05 37 views
-1

我有各自的數據如下表:四個星期的數據 - 按

FORECAST: 
- ITEM 
- FORECAST_WEEK_DATE 
- FORECAST 

SALES: 
- ITEM 
- SALES_WEEK_DATE 
- SALES 

的WEEK_DATE列有結束的一週裏像最新記錄: 2015年7月2日 15/02/2015 等。

我希望把從結果兩個表,這樣的結果,如:

ITEM FORECAST_TOTAL SALES_TOTAL 
001  23    45 

總最新4週數據。

我該如何做到這一點?

回答

2

SQL Fiddle

的Oracle 11g R2架構設置

CREATE TABLE FORECAST (ITEM, FORECAST_WEEK_DATE, FORECAST) AS 
      SELECT 1, DATE '2015-01-01',      1 FROM DUAL 
UNION ALL SELECT 1, DATE '2015-01-01' + INTERVAL '7' DAY, 2 FROM DUAL 
UNION ALL SELECT 1, DATE '2015-01-01' + INTERVAL '14' DAY, 3 FROM DUAL 
UNION ALL SELECT 1, DATE '2015-01-01' + INTERVAL '21' DAY, 4 FROM DUAL 
UNION ALL SELECT 1, DATE '2015-01-01' + INTERVAL '28' DAY, 5 FROM DUAL 
UNION ALL SELECT 1, DATE '2015-01-01' + INTERVAL '35' DAY, 6 FROM DUAL 
UNION ALL SELECT 1, DATE '2015-01-01' + INTERVAL '42' DAY, 7 FROM DUAL 
UNION ALL SELECT 2, DATE '2015-01-01',      3 FROM DUAL 
UNION ALL SELECT 2, DATE '2015-01-01' + INTERVAL '7' DAY, 1 FROM DUAL 
UNION ALL SELECT 2, DATE '2015-01-01' + INTERVAL '14' DAY, 5 FROM DUAL 
UNION ALL SELECT 2, DATE '2015-01-01' + INTERVAL '21' DAY, 8 FROM DUAL 
UNION ALL SELECT 2, DATE '2015-01-01' + INTERVAL '28' DAY, 3 FROM DUAL 
UNION ALL SELECT 2, DATE '2015-01-01' + INTERVAL '35' DAY, 2 FROM DUAL; 

CREATE TABLE SALES (ITEM, SALES_WEEK_DATE, SALES) AS 
      SELECT 1, DATE '2015-01-01',      3 FROM DUAL 
UNION ALL SELECT 1, DATE '2015-01-01' + INTERVAL '7' DAY, 2 FROM DUAL 
UNION ALL SELECT 1, DATE '2015-01-01' + INTERVAL '14' DAY, 1 FROM DUAL 
UNION ALL SELECT 1, DATE '2015-01-01' + INTERVAL '21' DAY, 5 FROM DUAL 
UNION ALL SELECT 1, DATE '2015-01-01' + INTERVAL '28' DAY, 3 FROM DUAL 
UNION ALL SELECT 1, DATE '2015-01-01' + INTERVAL '35' DAY, 8 FROM DUAL 
UNION ALL SELECT 1, DATE '2015-01-01' + INTERVAL '42' DAY, 11 FROM DUAL 
UNION ALL SELECT 2, DATE '2015-01-01',      7 FROM DUAL 
UNION ALL SELECT 2, DATE '2015-01-01' + INTERVAL '7' DAY, 1 FROM DUAL 
UNION ALL SELECT 2, DATE '2015-01-01' + INTERVAL '14' DAY, 4 FROM DUAL 
UNION ALL SELECT 2, DATE '2015-01-01' + INTERVAL '21' DAY, 3 FROM DUAL 
UNION ALL SELECT 2, DATE '2015-01-01' + INTERVAL '28' DAY, 6 FROM DUAL 
UNION ALL SELECT 2, DATE '2015-01-01' + INTERVAL '35' DAY, 8 FROM DUAL; 

查詢1

這將獲得最新的4周表中每個項目的數據:

WITH ordered_week_data AS (
SELECT f.ITEM, 
     ROW_NUMBER() OVER (PARTITION BY f.ITEM ORDER BY FORECAST_WEEK_DATE DESC) AS RN, 
     f.FORECAST_WEEK_DATE AS WEEK_DATE, 
     FORECAST, 
     SALES 
FROM FORECAST f 
     INNER JOIN 
     SALES s 
     ON (f.ITEM = s.ITEM AND f.FORECAST_WEEK_DATE = s.SALES_WEEK_DATE) 
) 
SELECT ITEM, 
     MAX(WEEK_DATE) AS LAST_WEEK_DATE, 
     SUM(FORECAST) AS FORECAST_TOTAL, 
     SUM(SALES) AS SALES_TOTAL 
FROM ordered_week_data 
WHERE RN <= 4 
GROUP BY 
     ITEM 

Results

| ITEM |    LAST_WEEK_DATE | FORECAST_TOTAL | SALES_TOTAL | 
|------|----------------------------|----------------|-------------| 
| 1 | February, 12 2015 00:00:00 |    22 |   27 | 
| 2 | February, 05 2015 00:00:00 |    18 |   21 | 
相關問題