2017-06-06 84 views
0

我正在查看编写查询来解决基于存储该行优先级的列的重叠日期时间段。这有助于我决定是否需要保留该行或将其替换为其他重叠行。对于e.g:SQL查询根据优先级解决重叠问题

 
FromDate ToDate Priority 
----------------------------- 
1/1/2014 6/30/2014  1 --row1 
2/1/2014 7/30/2014  2 --row2

我的结果应该看起来像下面的

 
FromDate ToDate  Priority 
------------------------------ 
1/1/2014 6/30/2014  1 --row 1 
7/1/2014 7/30/2012  2 --row 2 
+0

2012年是一个错字,对吧? – SqlZim

+2

什么是您的RDBMS?如果sql server 2012+你尝试过'LAG'吗? –

+2

[xkcd PSA ISO 8601](https://xkcd.com/1179/) – SqlZim

回答

1
with temp1 (FromDate,todate, dt, priority) as      
(                 
    SELECT FromDate,todate,fromdate as dt ,Priority     
    FROM mytable              
    UNION ALL              

    SELECT FromDate,todate ,           
dt + 1 day as dt ,Priority          
    FROM temp1              
    WHERE dt < todate            
)                 
SELECT min(dt) as fromdate, max(dt) as todate, priority   
FROM temp1 a              
where priority = (select min(priority) from temp1 where dt =a.dt) 
group by priority