SQL Exchange Null具有其他行值

发布于 2025-02-10 14:09:02 字数 1352 浏览 3 评论 0原文

我是SQL的新手,我正在为VISW_FEATURE_COUNTRY和JOIN_COUNTRY列中的零值问题提供解决方案。 我希望该单元格从最近的日期(同一天,前一天或之后的同一天)获取非零值,而不是零值。 我已经附加了当前的结果和预期的结果屏幕截图。

CREATE VOLATILE TABLE new_base_count AS
(SELECT COALESCE(visw.employeemail, vnotw.employeemail) AS visw_employeemail
,COALESCE(visw.completed_at, vnotw.completed_at) AS visw_completed_at
,CASE WHEN visw.feature_country IN ('UK', 'UK/IE', 'AU') THEN 'UK'
ELSE visw.feature_country END AS visw_feature_country
,CASE WHEN visw_feature_country IN ('UK', 'UK/IE', 'AU') THEN 'UK'
ELSE visw_feature_country END AS join_country
FROM new_visw visw

FULL OUTER JOIN new_vnotw vnotw
ON visw.employeemail = vnotw.employeemail AND
visw.completed_at = vnotw.completed_at 
AND visw.feature_country = vnotw.feature_country
FULL OUTER JOIN new_vwonly vwo
ON (visw.employeemail = vwo.employee_email OR vnotw.employeemail = vwo.employee_email)
AND (visw.completed_at = vwo.completed_at OR vnotw.completed_at = vwo.completed_at)
AND (visw.feature_country = vwo.feature_country OR vnotw.feature_country = vwo.feature_country)
GROUP BY 1,2,3,4) WITH DATA ON COMMIT PRESERVE ROWS;

当前结果:

当前

预期结果:

预期

I'm pretty new to SQL and I'm looking for a solution to a NULL values problem in a visw_feature_country and join_country columns.
Instead of NULL values I would like the cell to take non-null value from the nearest date (the same day, day prior or day after) for the same email.
I've attached the current result and the expected result screenshots.

CREATE VOLATILE TABLE new_base_count AS
(SELECT COALESCE(visw.employeemail, vnotw.employeemail) AS visw_employeemail
,COALESCE(visw.completed_at, vnotw.completed_at) AS visw_completed_at
,CASE WHEN visw.feature_country IN ('UK', 'UK/IE', 'AU') THEN 'UK'
ELSE visw.feature_country END AS visw_feature_country
,CASE WHEN visw_feature_country IN ('UK', 'UK/IE', 'AU') THEN 'UK'
ELSE visw_feature_country END AS join_country
FROM new_visw visw

FULL OUTER JOIN new_vnotw vnotw
ON visw.employeemail = vnotw.employeemail AND
visw.completed_at = vnotw.completed_at 
AND visw.feature_country = vnotw.feature_country
FULL OUTER JOIN new_vwonly vwo
ON (visw.employeemail = vwo.employee_email OR vnotw.employeemail = vwo.employee_email)
AND (visw.completed_at = vwo.completed_at OR vnotw.completed_at = vwo.completed_at)
AND (visw.feature_country = vwo.feature_country OR vnotw.feature_country = vwo.feature_country)
GROUP BY 1,2,3,4) WITH DATA ON COMMIT PRESERVE ROWS;

Current result:

current

Expected result:

expected

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

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

发布评论

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

评论(1

樱花落人离去 2025-02-17 14:09:02

尝试last_value:

last_value(CASE WHEN visw.feature_country IN ('UK', 'UK/IE', 'AU') 
                THEN 'UK'
                ELSE visw.feature_country
           END IGNORE NULLS
over (partition by visw_employeemail
      order by visw_completed_at) AS visw_feature_country

类似于join_country

Try LAST_VALUE:

last_value(CASE WHEN visw.feature_country IN ('UK', 'UK/IE', 'AU') 
                THEN 'UK'
                ELSE visw.feature_country
           END IGNORE NULLS
over (partition by visw_employeemail
      order by visw_completed_at) AS visw_feature_country

Similar for join_country

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