使用max()从历史表构建最新表

时间:2014-04-26 16:04:37

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

我有两个表,一个mls_history表和一个mls表。 mls_history表将每条记录上传到系统,mls表是mls_history的子集,仅包含最新的状态日期(stat_date)。

例如:

MLS_HISTORY:

mlsnum | stat_date
-------------------
1      | 2013-01-04
2      | 2013-01-08
1      | 2013-04-09
1      |

MLS:

mlsnum | stat_date
-------------------
1      | 2013-04-09
2      | 2013-01-08

我想要一个插入/选择查询(如果可能?),它会抓取每个mlsnum的max stat_date,并将其存储在mls表中。

stackoverflow上已有一些示例,但如果stat_dates相同,则几乎所有示例都允许多条记录。我希望这只返回1条记录,即使2符合最高标准。

为了使事情更复杂,没有连续的列,所以没有唯一的ID,所以我不能说&#34;如果是平局,请选择最大ID为#34; < / p>

这可能吗?

2 个答案:

答案 0 :(得分:1)

INSERT INTO mls                -- assuming it's empty
SELECT DISTINCT ON (mlsnum) *
FROM   mls_history
ORDER  BY mlsnum, stat_date DESC;

使用最新的mlsnum,每stat_date选择完全 1行。

细节和解释:
Select first row in each GROUP BY group?

答案 1 :(得分:1)

在这种情况下,一个普通的group by完成工作

select mlsnum, max(stat_date)
from mls_history
group by mlsnum

@Erwin`s answer中使用的{非常方便的} distinct on仅限Postgresql,并且有点难以理解将来维护的复杂性。