如何从每个货币对SQL中选择最大时间戳?
假设我有一张桌子如何从每个货币对SQL中选择最大时间戳?,sql,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 curr1 curr2 rate 2017-01-03 USD GBP
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 curr1 curr2 rate
2017-01-03 USD GBP 0.83
2017-01-01 EUR GBP 0.98
我不确定如何使用
distinct
和group by
功能执行此操作。有人能提供建议吗?嗯,我不确定如何使用distinct
和group 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
);
嗯,我不确定如何使用
distinct
和groupby
来实现这一点。也许其他人可以解决这个问题
我会在大多数数据库中使用相关子查询:
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
);
这可以通过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;
这可以通过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;