我有一个netezza表,数据在更新时会重叠,但每个关联的timestamp
字段会有所不同。例如:
+-----------------+----------+-------------+-----+ | ts | first_nm | last_nm | val | +-----------------+----------+-------------+-----+ | 4/1/2015 4:15pm | ben | bloomington | 12 | | 4/1/2015 4:20pm | ben | bloomington | 4.5 | | 4/1/2015 4:20pm | andrew | bloomberg | 2.8 | +-----------------+----------+-------------+-----+
我想保留以下记录并删除本布鲁明顿的早期时间戳:
+-----------------+----------+-------------+-----+ | ts | first_nm | last_nm | val | +-----------------+----------+-------------+-----+ | 4/1/2015 4:20pm | ben | bloomington | 4.5 | | 4/1/2015 4:20pm | andrew | bloomberg | 2.8 | +-----------------+----------+-------------+-----+
所以,基于first_nm
和last_nm
是不同的,我怎样才能保持最新的ts具有最新值?
我想我可以使用row_number()
函数,但我不确定如何在我的delete
语句中实现它。
答案 0 :(得分:3)
您可以使用以下示例删除不是最新时间戳的所有行。我添加了窗口函数Region M Y
NORTH 654321 123456
NORTH 234567 432765
>>total 888888 556221
SOUTH 567234 321456
>>total 567234 321456
CENTER 456123 987654
>>Total 456123 987654
>>>>Totals 1912245 1865331
作为示例。
row_number()
答案 1 :(得分:0)
应该采用相同的较短解决方案是:
DELETE FROM table t
WHERE
EXISTS (SELECT * FROM table
WHERE t.rwid < rwid
AND t.first_nm = first_nm
AND t.last_nm = last_nm)