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

如何基于已生成的patient表数据生成treatment表模拟数据?

生成treatment表模拟数据的方法

方案1:为每个患者生成固定数量的治疗记录

如果需要给每个患者生成指定条数的治疗记录(比如每个患者2条),可以用以下SQL:

WITH vars (treatment_count_per_patient) AS (
  VALUES (2) -- 定义每个患者对应的治疗记录数量
)
INSERT INTO treatment (id, patient_pk)
SELECT
  CONCAT('Treat_', ROW_NUMBER() OVER ()) AS id, -- 生成唯一的字符串型id
  p.pk AS patient_pk
FROM patient p
CROSS JOIN vars
CROSS JOIN generate_series(1, vars.treatment_count_per_patient)
WHERE p.tenant_id = 5; -- 筛选之前生成的租户ID为5的患者

方案2:随机生成每个患者的治疗记录数

如果希望每个患者的治疗记录数随机(例如1到5条),可以使用随机函数调整:

INSERT INTO treatment (id, patient_pk)
SELECT
  CONCAT('Treat_', ROW_NUMBER() OVER ()) AS id,
  p.pk AS patient_pk
FROM patient p
CROSS JOIN generate_series(1, floor(random() * 5) + 1) -- 随机生成1-5条记录
WHERE p.tenant_id = 5;

方案3:使用数字型唯一id

如果需要id为数字类型的唯一值,直接用行号生成即可:

INSERT INTO treatment (id, patient_pk)
SELECT
  ROW_NUMBER() OVER () AS id, -- 生成自增的数字唯一id
  p.pk AS patient_pk
FROM patient p
CROSS JOIN generate_series(1, 3) -- 每个患者生成3条记录
WHERE p.tenant_id = 5;

补充说明

  • pk列是自动生成的,因此INSERT语句无需指定该列,数据库会自动填充。
  • 若需要扩展更多字段(如治疗日期、治疗类型),可以在SELECT子句中添加生成逻辑,例如:
    -- 示例:添加随机治疗日期和类型
    INSERT INTO treatment (id, patient_pk, treat_date, treat_type)
    SELECT
      CONCAT('Treat_', ROW_NUMBER() OVER ()) AS id,
      p.pk AS patient_pk,
      CURRENT_DATE - (random() * 365)::INT AS treat_date, -- 随机过去一年的日期
      CASE floor(random() * 3)
        WHEN 0 THEN 'Medication'
        WHEN 1 THEN 'Surgery'
        ELSE 'Physical Therapy'
      END AS treat_type
    FROM patient p
    CROSS JOIN generate_series(1, 2)
    WHERE p.tenant_id = 5;
    

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.22 01:03:28