我有两个表,一个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>
这可能吗?
答案 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行。
答案 1 :(得分:1)
在这种情况下,一个普通的group by
完成工作
select mlsnum, max(stat_date)
from mls_history
group by mlsnum
@Erwin`s answer中使用的{非常方便的} distinct on
仅限Postgresql,并且有点难以理解将来维护的复杂性。