如何仅获取最近的最新值

时间:2015-04-05 21:27:16

标签: sql firebird greatest-n-per-group

我有两个表格table1和详细table2

Table1结构

table1_id integer,
description varchar(50)

Table2结构

table2_id integer,
table1_id integer,
price numeric(7,2),
Price_date date

我需要编写SQL或在这两个表之间建立链接的视图,但是我想从table2获取的问题只是为了获取单个值,该值是price字段中最近的一个使用要与price_date关联的table1字段,换句话说,我不想从Table2.table1_id字段获取任何重复项。我应该怎么写那个SQL?

1 个答案:

答案 0 :(得分:1)

我假设您希望从表中获取每个table1_id的所有最新条目,而不仅仅是最新条目(这更简单)。

如果你想要最新的table1_id,你首先需要选择每个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添加唯一约束。