如果日期相等,则打印多个组合表



使用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
);  

现在我需要两样东西:

  1. 选择updateTime下具有相同值的所有记录,然后将它们同时打印(成对(

换句话说(伪代码(:

foreach e in EURO
if (exist d in DOLLAR) and (d.updateTime == e.updateTime)
print (e,d)
  1. 打印上面未打印的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

最新更新