janysoun 2023-02-08 15:54 采纳率: 100%
浏览 558
已结题

计算判断数据客户是否新老客户

有一份病例数据,有挂号日期时间,姓名,电话,宠物名, 需要判断一下每个客户是新客户还是老客户,判断标准是,今天来了个客户a,那么在该表所有早于今天的数据中判断有没有该客户的记录,如果有早于今天的数据,那么就是老客户,如果首次出现 就是新客户,该怎么做?

收到了不少评论 还是差点意思的,有一种比较简便的办法就是 根据客户和宠物名分组 按照时间顺序排序 这样 1为新客户,其他的为老客户,所以说,每一个客户都有一次当新客户的机会,只有这样才能判断出老客留存率!

能理解我意思嘛?所以问题来了,除了这种方法,如何用存储过程或者拉链表去做,求教!感恩戴德

  • 写回答

15条回答 默认 最新

  • 火星的猫FM 2023-02-09 22:10
    关注

    在 MySQL 数据库中,可以使用拉链表实现新客户/老客户判断。拉链表是一种以时间为序的维表,每一行对应了一个客户的一次挂号。下面是一份示例代码:

    
    CREATE TABLE customers_history (
      customer_id INT NOT NULL AUTO_INCREMENT,
      registration_date DATE NOT NULL,
      name VARCHAR(50) NOT NULL,
      phone VARCHAR(20) NOT NULL,
      pet_name VARCHAR(50) NOT NULL,
      PRIMARY KEY (customer_id)
    );
    
    CREATE TABLE customers_status (
      customer_id INT NOT NULL,
      status ENUM('new', 'old') NOT NULL,
      PRIMARY KEY (customer_id)
    );
    
    DELIMITER //
    CREATE PROCEDURE update_customer_status()
    BEGIN
      DECLARE cur_date DATE DEFAULT CURDATE();
      
      INSERT INTO customers_status (customer_id, status)
      SELECT customer_id,
             IFNULL((SELECT 'old' FROM customers_history h WHERE h.customer_id = c.customer_id AND h.registration_date < cur_date), 'new') AS status
      FROM customers_history c
      ON DUPLICATE KEY UPDATE status = VALUES(status);
    END//
    DELIMITER ;
    
    

    这份代码创建了两张表:customers_history 和 customers_status。前者存储了客户的每次挂号信息,后者存储了客户的状态(新客户/老客户)。

    这份代码还创建了一个存储过程 update_customer_status,它每天会更新所有客户的状态。在执行这个存储过程时,会对所有客户进行遍历,并在 customers_status 表中更新对应的状态。

    如果当天有客户挂号,则在挂号时将新的挂号信息插入 customers_history 表。然后,通过执行存储过程

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论
查看更多回答(14条)

报告相同问题?

问题事件

  • 系统已结题 2月21日
  • 已采纳回答 2月13日
  • 修改了问题 2月9日
  • 创建了问题 2月8日

悬赏问题

  • ¥30 ansible连接设备报错
  • ¥60 pmsampsize包取值问题
  • ¥15 波形合成电路的设计学习
  • ¥15 unity脚本挂不上
  • ¥15 数学建模数学建模需要
  • ¥20 Java Sound Api 调用Mixer.getLine偶现Line unsupported错误。
  • ¥15 使用cuda加速opencv运算但是报错AttributeError: module 'cv2.cuda' has no attribute 'getCudaEnabledDeviceCount'
  • ¥15 java输入输出异常
  • ¥15 三子连珠对弈小游戏制作
  • ¥15 C++扑克牌游戏的编程