2017-03-16 43 views
0

我需要检索每个城市的最近5天预测信息。检索最近发布日期的每个城市的最近5天预测

我的表看起来像下面

enter image description here

真正的问题是发行日期。

该城市可能包含具有不同发布日期的同一日期的多个预测信息。

我需要通过预测日期检索最近的5条记录与最新发布日期组中的每个城市

我试图像下面,但没有给出预期的结果

SELECT * FROM(
SELECT 
    ROW_NUMBER() OVER (PARTITION BY CITY_ID ORDER BY FORECAST_DATE DESC, ISSUE_DATE DESC) AS rn, 
    CITY_ID, FORECAST_DATE, ISSUE_DATE 
FROM 
    FORECAST  
GROUP BY FORECAST_DATE 
) WHERE rn <= 5 

enter image description here

任何建议或意见将有帮助

回答

1

这将让每天最新的已发行预测在最近的5天,每个城市:

SELECT * 
FROM (
    SELECT f.*, 
     DENSE_RANK() OVER (PARTITION BY city_id ORDER BY forecast_date DESC) 
      AS forecast_rank, 
     ROW_NUMBER() OVER (PARTITION BY city_id, forecast_date ORDER BY issue_date DESC) 
      AS issue_rn 
    FROM Forecast f 
) 
WHERE forecast_rank <= 5 
AND issue_rn = 1; 
+0

谢谢@ MT0像魅力一样工作 – user3535945

0

Partition by作品像group by但仅限于该功能。

尝试

with CTE as 
(
select t1.*, 
     row_number() over (partition by city_id, forecast_date order by issue_date desc) as r_ord 
from Forecast 
) 
select CTE.* 
from CTE 
where r_ord <= 5 
+0

工作不正常,请在您的解决方案中按照forecast_date,city_id进行分组,因此,r_ord <= 5将返回同一日期,同一城市的记录 – user3535945

0

试试这个

SELECT * FROM(
    SELECT 
     ROW_NUMBER() OVER (PARTITION BY CITY_ID, FORECAST_DATE order by ISSUE_DATE DESC) AS rn, 
     CITY_ID, FORECAST_DATE, ISSUE_DATE 
    FROM 
     FORECAST  
    ) WHERE rn <= 5 
+0

不按预期方式工作 – user3535945

+0

这将获得前5天发布的预测,没有天数限制。不是OP想要的。 – MT0