如何仅获取最近的值
How to get last recent value only
我有两个表 master table1
和 detail table2
Table1
结构
table1_id integer,
description varchar(50)
Table2
结构
table2_id integer,
table1_id integer,
price numeric(7,2),
Price_date date
我需要在这两个表之间写 SQL 或 link 的视图,但是我想从 table2
中得到的问题只是为了获得一个最新的值price
字段使用 price_date
字段与 table1
编辑 link,换句话说,我不想从 Table2.table1_id
字段中获取任何重复项。我应该怎么写 SQL ?
我假设您想要 table 中每个 table1_id
的所有最新条目,而不仅仅是最新条目(这要简单得多)。
如果你想要每个table1_id
的最新记录,你首先需要select每个id的最新记录,然后查询其余的记录,所以像这样:
WITH latestprice (
SELECT table1_id, MAX(price_date) AS price_date
FROM table2
GROUP BY table1_id
)
SELECT t2.table2_id, t2.table1_id, t2.price, t2.price_date
FROM latestprice l
INNER JOIN table2 t2
ON t2.table1_ud = l.table1_id AND t2.price_date = l.price_date
如果您还需要来自 table1
的信息,那么您需要添加一个额外的连接。请注意,上述查询有一个缺陷:如果 table1_id
有多个具有相同 price_date
的条目,它将为每个 table_id
生成多行和重复项。如果你想强制这不会发生,你需要为 table1_id, price_date
.
添加一个唯一约束
我有两个表 master table1
和 detail table2
Table1
结构
table1_id integer,
description varchar(50)
Table2
结构
table2_id integer,
table1_id integer,
price numeric(7,2),
Price_date date
我需要在这两个表之间写 SQL 或 link 的视图,但是我想从 table2
中得到的问题只是为了获得一个最新的值price
字段使用 price_date
字段与 table1
编辑 link,换句话说,我不想从 Table2.table1_id
字段中获取任何重复项。我应该怎么写 SQL ?
我假设您想要 table 中每个 table1_id
的所有最新条目,而不仅仅是最新条目(这要简单得多)。
如果你想要每个table1_id
的最新记录,你首先需要select每个id的最新记录,然后查询其余的记录,所以像这样:
WITH latestprice (
SELECT table1_id, MAX(price_date) AS price_date
FROM table2
GROUP BY table1_id
)
SELECT t2.table2_id, t2.table1_id, t2.price, t2.price_date
FROM latestprice l
INNER JOIN table2 t2
ON t2.table1_ud = l.table1_id AND t2.price_date = l.price_date
如果您还需要来自 table1
的信息,那么您需要添加一个额外的连接。请注意,上述查询有一个缺陷:如果 table1_id
有多个具有相同 price_date
的条目,它将为每个 table_id
生成多行和重复项。如果你想强制这不会发生,你需要为 table1_id, price_date
.