Postgresql

歷史上第一次匹配的左連接表

  • June 26, 2020

表 A

表 B

在此處輸入圖像描述

我想要完成的是將 TableB 加入到 TableA 中,其中 TableA.date <= TableB.date,但只有與 Table.B.date 最接近的最大日期的值。目前,我得到的是所有以前的值,如下所示:

[

postgres 版本:PostgreSQL 9.2.24

腳本:

CREATE TABLE public.table_a (
   id serial8 NOT NULL,
   value text NULL,
   "date" timestamp NOT NULL DEFAULT now()
);

INSERT INTO public.table_a
(value, "date")
VALUES
('Value 1', '2020-01-29'::date),
('Value 2', '2020-02-01'::date),
('Value 3', '2020-02-12'::date);


CREATE TABLE public.table_b (
   id serial8 NOT NULL,
   value text NULL,
   "date" timestamp NOT NULL DEFAULT now()
);

INSERT INTO public.table_b
(value, "date")
VALUES
('Task A', '2020-02-05'::date),
('Task B', '2020-02-15'::date);
WITH cte AS ( SELECT table_a.value value_a, 
                    table_b.value value_b, 
                    ROW_NUMBER() OVER (PARTITION BY table_b.value ORDER BY table_a."date" DESC) rn 
             FROM table_a
             JOIN table_b ON table_a."date" &lt;= table_b."date")
SELECT value_b, value_a
FROM cte
WHERE rn = 1;

小提琴

檢查這是否適用於您的伺服器版本。

引用自:https://dba.stackexchange.com/questions/269923