2013-08-19 114 views
1

我有一个价格表,包含目的地,价格和effective_dates这个价格。递归SQL查询。选择最后一个入口分组

我想得到一个与上一个价格的目的地清单。

示例表:

Destination | Code | Effective_date | Price 
Spain  | 34 | 2013-04-05  | 0.02 
Spain  | 34 | 2013-07-01  | 0.01 
Spain Mobile | 346 | 2013-04-05  | 0.07 
Spain Mobile | 346 | 2013-07-01  | 0.08 

例如,如果我搜索码34我想西班牙2013-07-01西班牙移动2013-07-01 我尝试用

SELECT * 
FROM carrier_fares AS cf1    
WHERE NOT EXISTS (
    SELECT * FROM carrier_fares AS cf2 
    WHERE code LIKE ? 
    AND cf1.effective_date < cf2.effective_date 
    ) 

该表有50,000个以上的条目。

回答

2
SELECT x.* 
    FROM carrier_fares x 
    JOIN 
     (SELECT destination 
       , MAX(effective_date) max_date 
      FROM carrier_fares 
      GROUP 
       BY destination 
     ) y 
     ON y.destination = x.destination 
     AND y.max_date = x.effective_date 

-- [WHERE code LIKE '34%'] 
; 
-1
SELECT * FROM (
    SELECT * FROM carriers_fares ORDER BY effective_date DESC 
) as t1 GROUP by effective_date, code