You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在SQL中获取每行最后一个非空的所有权变更日期?

每行取最后一个非空所有权变更日期的解决方案

核心思路

直接从最靠后的所有权变更日期列往前判断,返回第一个非空值——这个值就是该车辆最后一次所有权变更的日期。这种方法不需要修改表结构,且对百万级数据的性能友好。

各数据库具体实现

假设你的所有权变更日期列名为 owner_change_1, owner_change_2, ..., owner_change_N(数字越大对应越晚的变更记录),以下是主流数据库的写法:

MySQL/MariaDB

使用COALESCE函数,它会返回传入参数中第一个非空值:

SELECT
  vehicle_id,
  COALESCE(owner_change_N, owner_change_N-1, ..., owner_change_2, owner_change_1) AS last_owner_change_date
FROM your_vehicle_table;

把实际列名按从最新到最早的顺序填入COALESCE即可,比如有6个列就写COALESCE(owner_change_6, owner_change_5, owner_change_4, owner_change_3, owner_change_2, owner_change_1)。

SQL Server

同样用COALESCE,写法和MySQL一致:

SELECT
  vehicle_id,
  COALESCE(owner_change_N, owner_change_N-1, ..., owner_change_2, owner_change_1) AS last_owner_change_date
FROM your_vehicle_table;

PostgreSQL

PostgreSQL原生支持COALESCE,写法完全相同:

SELECT
  vehicle_id,
  COALESCE(owner_change_N, owner_change_N-1, ..., owner_change_2, owner_change_1) AS last_owner_change_date
FROM your_vehicle_table;

注意事项

  • 务必确认列的顺序:如果列名的数字不是对应变更顺序,需要先理清每个列对应的变更时间,再调整COALESCE里的参数顺序(最新的列放最前面)。
  • 该方法是行内运算,不需要表关联或子查询,百万级数据量下执行效率很高,不会有性能瓶颈。

内容的提问来源于stack exchange,提问作者Mike

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.15 14:20:59