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

基于MySQL实现船舶所有权变更与年份关联查询的技术咨询

可行方案:船舶所有权数据库设计与查询

表结构设计

1. 船舶基础信息表(ships)

存储船舶固定属性,避免数据冗余:

  • ship_id INT PRIMARY KEY AUTO_INCREMENT:唯一标识船舶的主键
  • ship_name VARCHAR(100) NOT NULL:船舶名称
  • imo_number VARCHAR(20) UNIQUE:可选(推荐添加),全球唯一的国际海事组织编号,避免重名混淆
  • 其他字段(如gross_tonnage总吨位、built_year建造年份)可按需添加

2. 船舶所有权变更记录表(ship_ownership_history)

记录船舶每次转售的所有权周期,关联船舶ID实现历史追踪:

  • history_id INT PRIMARY KEY AUTO_INCREMENT:主键
  • ship_id INT NOT NULL FOREIGN KEY REFERENCES ships(ship_id):关联船舶表的外键
  • company_name VARCHAR(100) NOT NULL:所属公司名称
  • start_date DATE NOT NULL:该公司持有船舶的起始日期(转售完成日期)
  • end_date DATE:该公司持有船舶的结束日期(未转售则设为NULL)

核心查询实现

通过船舶名称+年份查询对应所属公司的SQL语句:

SELECT s.ship_name, soh.company_name
FROM ships s
JOIN ship_ownership_history soh ON s.ship_id = soh.ship_id
WHERE s.ship_name = '目标船舶名称'
AND (
    -- 年份落在当前所有权周期内
    (YEAR(soh.start_date) <= 2020 AND YEAR(soh.end_date) >= 2020)
    OR
    -- 该年份时船舶仍由当前公司持有(未转售)
    (YEAR(soh.start_date) <= 2020 AND soh.end_date IS NULL)
);

替换'目标船舶名称'和2020为实际查询值即可。

数据维护说明

  • 首次录入:第一家公司的记录中,start_date填船舶交付日期,end_date设为NULL
  • 转售更新:船舶转售时,先更新上一条所有权记录的end_date为转售日期,再插入新记录,start_date填转售日期,end_date设为NULL

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.25 17:22:17