我有这个查询问题。希望有人可以提供帮助
下面的表格为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获得这个结果
感谢名单
答案 0 :(得分: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
答案 1 :(得分: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的代码)将返回太多行,但是对您提供的数据集起作用。