抱歉,如果我没有正确格式化所有内容,这是我第一次在这里发帖,很抱歉英语不好。
我有一个大查询,返回如下内容:
col1 | col2 |col3|col4
==========================
A |A1 |A2 |01/01/20
A |A1 |A3 |01/02/20
A |' ' |' ' |20/02/20
B |' ' |' ' |01/01/20
C |C1 |C2 |01/01/20
C |C1 |C3 |01/02/20
我想将此结果插入到这样的表中:
col1 | col2 |col3|col4
==========================
A |A1 |A3 |01/02/20
B |' ' |' ' |01/01/20
C |C1 |C3 |01/02/20
我尝试了类似的东西:
MERGE INTO dest_table d
USING (SELECT ....) a
on a.col1 = d.col1
WHEN NOT MATCHED THEN INSERT
WHEN MATCHED THEN IF col2 = ' ' THEN do nothing ELSE compare date and keep the most recent one
当我这样做时,它会插入每一行
我希望它的工作方式是这样的:
- 插入"A;答1;A2",因为不匹配
- "一;答1;A3"是匹配的,因为"A"之前刚刚插入,所以输入"匹配"大小写
- "A;';''"与上一个相同
我可以用"合并到"做类似的事情吗,还是应该尝试另一种方法?
SELECT DISTINCT col1,
FIRST_VALUE(col2) OVER (PARTITION BY col1
ORDER BY CASE WHEN col2 = ' '
THEN DATE '1980-01-01'
ELSE col4
END DESC) col2,
FIRST_VALUE(col3) OVER (PARTITION BY col1
ORDER BY CASE WHEN col2 = ' '
THEN DATE '1980-01-01'
ELSE col4
END DESC) col3,
FIRST_VALUE(col4) OVER (PARTITION BY col1
ORDER BY CASE WHEN col2 = ' '
THEN DATE '1980-01-01'
ELSE col4
END DESC) col4
FROM test
ORDER BY col1;
小提琴