如何为每日加载的去重查询结果新增并填充dedup_date列
嘿,其实你完全不用CASE语句来做这个事儿——这比你想的简单多啦!
解决方案:给去重后的子表添加更新日期列
你要实现的需求核心是给去重后的所有行统一填充当前日期作为更新标记,根本不需要用到CASE(CASE是用来处理条件分支逻辑的,这里没有条件判断的需求,纯赋值就够了)。直接在SELECT列表里新增列并赋值CURRENT_DATE即可。
通用SQL示例
先给你一个适配大多数数据库的写法:
SELECT DISTINCT -- 这里放你原本要查询的所有交易字段 transaction_id, amount, customer_id, merchant_name, -- 新增dedup_date列,用当前日期填充所有行 CURRENT_DATE AS dedup_date FROM your_daily_data_table;
不同数据库的细节补充
有些数据库对“当前日期”的写法略有差异,给你列几个常见场景的写法:
- MySQL/MariaDB:用
CURRENT_DATE或者CURDATE()都可以SELECT DISTINCT transaction_id, amount, customer_id, CURDATE() AS dedup_date FROM your_daily_data_table; - PostgreSQL:
CURRENT_DATE是标准写法,也可以用NOW()::DATE提取纯日期部分SELECT DISTINCT transaction_id, amount, customer_id, CURRENT_DATE AS dedup_date FROM your_daily_data_table; - SQL Server:需要把当前时间转成日期类型,常用
CAST(GETDATE() AS DATE)SELECT DISTINCT transaction_id, amount, customer_id, CAST(GETDATE() AS DATE) AS dedup_date FROM your_daily_data_table;
为什么不用CASE?
你之前考虑CASE语句,其实它的适用场景是条件判断分支,比如“如果交易金额>1000就标记为大额,否则标记为小额”这种逻辑。而你现在只是要给所有行统一赋值当前日期,直接新增列赋值就足够简洁清晰,完全没必要绕弯子用CASE。
当然如果非要用CASE(纯属多此一举),语法也能写,但完全没必要:
SELECT DISTINCT transaction_id, amount, customer_id, -- 用永远为真的条件让所有行都取CURRENT_DATE CASE WHEN 1=1 THEN CURRENT_DATE END AS dedup_date FROM your_daily_data_table;
这种写法既冗余又容易让看代码的人困惑,真心不推荐。
内容的提问来源于stack exchange,提问作者Sotark
相关产品推荐
相关产品推荐

