如何从每个货币对SQL中选择最大时间戳?

时间:2018-06-06 19:45:46

标签: sql

说我有一张桌子

TIMESTAMP    curr1    curr2    rate
2017-01-01   USD      GBP      0.81
2017-01-01   EUR      GBP      0.98
2017-01-03   USD      GBP      0.83

我想获得每种货币对的最新TIMESTAMP 的货币对汇率,因此这是输出:

TIMESTAMP    curr1    curr2    rate
2017-01-03   USD      GBP      0.83
2017-01-01   EUR      GBP      0.98

我不确定如何使用distinctgroup by函数执行此操作。有人可以建议吗?

2 个答案:

答案 0 :(得分:2)

这可以通过group by和join来完成:

SELECT x.TIMESTAMP, x.curr1, x.curr2 
FROM your_table x 
INNER JOIN
(
     SELECT MAX(TIMESTAMP) max_timestamp, curr1, curr2 FROM your_table 
     GROUP BY curr1, curr2
) y
ON x.TIMESTAMP= y.max_timestamp
AND x.curr1 = y.curr1
AND x.curr2 = y.curr2;

答案 1 :(得分:1)

好吧,我不确定如何使用distinctgroup by执行此操作。也许其他人可以解决这个问题。

我会在大多数数据库中使用相关子查询:

select t.*
from atable t
where t.timestamp = (select max(t2.timestamp)
                     from atable t2
                     where t2.curr1 = t.curr1 and t2.curr2 = t.curr2
                    );