使用分区或 impala 中的任何其他函数复制值

发布于 2025-01-10 06:30:04 字数 332 浏览 4 评论 0原文

想要使用分区或任何其他函数复制 impala 或 sql 中的值。

输入表 输入图片此处描述

结果表

在此处输入图像描述

wanted to copy down values in impala or sql using partition or any other functions.

Input table
enter image description here

resultant table

enter image description here

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(2

几味少女 2025-01-17 06:30:04

在 Oracle 中,使用 LAST_VALUE 分析函数:

SELECT col1,
       col2,
       LAST_VALUE(col3) IGNORE NULLS OVER (PARTITION BY col1 ORDER BY col2)
         AS col3
FROM   table_name

对于示例数据:

CREATE TABLE table_name(col1, col2, col3) AS
SELECT 'AA', DATE '2021-01-26', 'BB' FROM DUAL UNION ALL
SELECT 'AA', DATE '2021-01-27', NULL FROM DUAL UNION ALL
SELECT 'AA', DATE '2021-01-28', NULL FROM DUAL UNION ALL
SELECT 'AA', DATE '2021-01-29', 'CC' FROM DUAL UNION ALL
SELECT 'AA', DATE '2021-01-30', NULL FROM DUAL UNION ALL
SELECT 'AA', DATE '2021-01-31', NULL FROM DUAL UNION ALL
SELECT 'AA', DATE '2021-02-01', 'BA' FROM DUAL UNION ALL
SELECT 'AA', DATE '2021-02-02', NULL FROM DUAL UNION ALL
SELECT 'AA', DATE '2021-02-03', NULL FROM DUAL;

输出:

<表类=“s-表”>
<标题>

COL1
COL2
COL3


<正文>

AA
21 年 1 月 26 日
BB

AA
21 年 1 月 27 日
BB

AA
21 年 1 月 28 日
BB

AA
21 年 1 月 29 日
抄送

AA
21 年 1 月 30 日
抄送

AA
21 年 1 月 31 日
抄送

AA
21 年 2 月 1 日
BA

AA
21 年 2 月 2 日
BA

AA
21 年 2 月 3 日
BA

如果您想更新表,则可以使用 MERGE 语句:

MERGE INTO table_name dst
USING (
  SELECT ROWID AS rid,
         LAST_VALUE(col3) IGNORE NULLS OVER (PARTITION BY col1 ORDER BY col2)
           AS col3
  FROM   table_name
) src
ON (src.rid = dst.ROWID)
WHEN MATCHED THEN
  UPDATE
  SET col3 = src.col3;

db<>fiddle 这里

In Oracle, use the LAST_VALUE analytic function:

SELECT col1,
       col2,
       LAST_VALUE(col3) IGNORE NULLS OVER (PARTITION BY col1 ORDER BY col2)
         AS col3
FROM   table_name

Which, for the sample data:

CREATE TABLE table_name(col1, col2, col3) AS
SELECT 'AA', DATE '2021-01-26', 'BB' FROM DUAL UNION ALL
SELECT 'AA', DATE '2021-01-27', NULL FROM DUAL UNION ALL
SELECT 'AA', DATE '2021-01-28', NULL FROM DUAL UNION ALL
SELECT 'AA', DATE '2021-01-29', 'CC' FROM DUAL UNION ALL
SELECT 'AA', DATE '2021-01-30', NULL FROM DUAL UNION ALL
SELECT 'AA', DATE '2021-01-31', NULL FROM DUAL UNION ALL
SELECT 'AA', DATE '2021-02-01', 'BA' FROM DUAL UNION ALL
SELECT 'AA', DATE '2021-02-02', NULL FROM DUAL UNION ALL
SELECT 'AA', DATE '2021-02-03', NULL FROM DUAL;

Outputs:

COL1COL2COL3
AA26-JAN-21BB
AA27-JAN-21BB
AA28-JAN-21BB
AA29-JAN-21CC
AA30-JAN-21CC
AA31-JAN-21CC
AA01-FEB-21BA
AA02-FEB-21BA
AA03-FEB-21BA

If you want to update the table then you can use a MERGE statement:

MERGE INTO table_name dst
USING (
  SELECT ROWID AS rid,
         LAST_VALUE(col3) IGNORE NULLS OVER (PARTITION BY col1 ORDER BY col2)
           AS col3
  FROM   table_name
) src
ON (src.rid = dst.ROWID)
WHEN MATCHED THEN
  UPDATE
  SET col3 = src.col3;

db<>fiddle here

梅窗月明清似水 2025-01-17 06:30:04

您可以尝试如下

with cte as
(select *,row_number()over(partition by col3 order by col2) as rn1,
row_number()over( order by col2) as rn2 ,
lag(col3) over(order by col2) as v from a
) select col1,col2,
 max(coalesce(col3,v)) over(partition by rn2-rn1) as col3  from cte order by col2

演示链接

在此处输入图像描述

you can try like below

with cte as
(select *,row_number()over(partition by col3 order by col2) as rn1,
row_number()over( order by col2) as rn2 ,
lag(col3) over(order by col2) as v from a
) select col1,col2,
 max(coalesce(col3,v)) over(partition by rn2-rn1) as col3  from cte order by col2

demo link

enter image description here

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文