2011-03-22 70 views
0

我有这个查询问题。希望有人能帮助获取最新更新日期及相关信息

鉴于见下表是Country Rates

ID  Country Date  Rate 
----------------------------------  
1. CANADA 03/02/2009 0.78 
2. UK  12/07/2009 1.23 
3. UK  03/02/2010 0.12 
4. USA  05/11/2010 1.63 
5. CANADA 03/02/2010 0.52 
6. USA  05/02/2011 0.98 

我想获得最新的日期&它相关的速率

结果应该是这样的:

Country Date  Rate 
---------------------------  
UK  03/02/2010 0.12 
CANADA 03/02/2010 0.52 
USA  05/02/2011 0.98 

所以我想让SQK获得这个结果

感谢名单

回答

1

Malikaa-

假设你的表的结构是这样的:

CREATE TABLE RATES 
(
    COUNTRY VARCHAR2(10), 
    DT  DATE, 
    RATE  NUMBER 
) 

,那么你可以运行这个得到答案:

SELECT O.COUNTRY, O.RATE, O.DT 
FROM RATES O JOIN 
(
    SELECT COUNTRY, MAX(DT) DT 
    FROM RATES 
    GROUP BY COUNTRY) I 
ON O.COUNTRY = I.COUNTRY 
AND O.DT = I.DT 

希望这有助于。

-CJ

0

以下是这样做的两种替代方式。第一种是位整洁和第二快一点,都还附带有您想要的顺序列的奖金;)

WITH latest_dates 
    AS (SELECT country, max(dt) AS dt FROM rates GROUP BY country) 
SELECT l.country, l.dt, r.rate FROM latest_dates l 
LEFT JOIN rates r ON l.country=r.country AND l.dt = r.dt; 

SELECT r.country, r.dt, r.rate 
FROM rates r 
LEFT OUTER JOIN rates l ON l.country = r.country AND l.dt > r.dt 
WHERE l.dt IS NULL; 

你应该注意到,所有三个(这两个和CJ的代码)将返回太多的行,当一个国家在同一天更多的一个费率,但工作的数据集,你给。