使用postgres 14.2
我对每种货币都有相同的表,下面的例子是eur和usd。
使用postgres 14.2
我对每种货币都有相同的表,下面的例子是eur和usd。
CREATE TABLE IF NOT EXISTS DOLLAR
(
id serial PRIMARY KEY,
updateTime timestamp,
//some more columns
);
CREATE TABLE IF NOT EXISTS EURO
(
id serial PRIMARY KEY,
updateTime timestamp,
//some more columns
);
现在我需要两样东西:
- 选择
updateTime
下具有相同值的所有记录,然后将它们同时打印(成对(
换句话说(伪代码(:
foreach e in EURO
if (exist d in DOLLAR) and (d.updateTime == e.updateTime)
print (e,d)
- 打印上面未打印的EURO中的所有行
为了让事情变得更容易,updateTime
在特定的表中是唯一的
我对每种货币都有相同的表
这可能是一个带有货币列的表。如果是这样的话,你也会做同样的事情,只是作为一个自我加入。
选择updateTime下具有相同值的所有记录,然后将它们同时打印(成对(。
内部在updateTime上联接表。
select updateTime, dollar.id, euro.id
from dollar
join euro on dollar.updateTime = euro.updateTime
请注意,timestamp
精确到微秒,因此您可能需要截断它。如果这样做,您需要更改唯一索引以包含截断。
CREATE UNIQUE INDEX dollar_updateTime_seconds_idx ON dollar(date_trunc('second', updateTime);
CREATE UNIQUE INDEX euro_updateTime_seconds_idx ON euro(date_trunc('second', updateTime);
打印EURO中未在之上打印的所有行
执行左排除联接。这是欧元的左联接,所以所有欧元列都包括在内,但不包括那些没有匹配美元行的列。
select euro.*
from euro
left join euro on dollar.updateTime = euro.updateTime
where dollar.id is null