如何使用 postgreSQL 在日期列中插入来自不同 table 的日期最旧的数据
How to insert data in a date column from a different table with the oldest date using postgreSQL
我有 2 tables trainings
和 training_instances
。请参阅以下架构:
培训 table:
column_name data_type is_nullable. foreign_key
id uuid NO NULL
day int4 NO NULL
start_time time(0) NO NULL
end_time time(0) NO NULL
team_id uuid YES public.teams(id)
inserted_at timestamp(0) NO NULL
updated_at timestamp(0) NO NULL
请注意,培训 table 还没有日期或 start_date 列。名为 day
的列是星期几。一个 training_id 可以有多个训练实例。
training_instances table:
column_name data_type is_nullable. foreign_key
id uuid NO NULL
date date NO NULL
start_time time(0) NO NULL
end_time time(0) NO NULL
team_size int4 YES NULL
training_id uuid YES public.trainings(id)
team_id uuid YES public.teams(id)
inserted_at timestamp(0) NO NULL
updated_at timestamp(0) NO NULL
我正在尝试在 trainings
table 中创建一个名为 start_date
的新列,然后在此处插入数据以用于现有培训。我想在这个新的 start_date
列中为每个训练插入最旧的 date
对应的训练实例。
最好的方法是什么?
首先,使用
创建列
alter table public.trainings add "start_date" date null;
然后,尝试执行这个查询
update trainings
set start_date = (select min(ti.date) from training_instances ti where
trainings.team_id = ti.team_id and
trainings.id = ti.training_id)
我有 2 tables trainings
和 training_instances
。请参阅以下架构:
培训 table:
column_name data_type is_nullable. foreign_key
id uuid NO NULL
day int4 NO NULL
start_time time(0) NO NULL
end_time time(0) NO NULL
team_id uuid YES public.teams(id)
inserted_at timestamp(0) NO NULL
updated_at timestamp(0) NO NULL
请注意,培训 table 还没有日期或 start_date 列。名为 day
的列是星期几。一个 training_id 可以有多个训练实例。
training_instances table:
column_name data_type is_nullable. foreign_key
id uuid NO NULL
date date NO NULL
start_time time(0) NO NULL
end_time time(0) NO NULL
team_size int4 YES NULL
training_id uuid YES public.trainings(id)
team_id uuid YES public.teams(id)
inserted_at timestamp(0) NO NULL
updated_at timestamp(0) NO NULL
我正在尝试在 trainings
table 中创建一个名为 start_date
的新列,然后在此处插入数据以用于现有培训。我想在这个新的 start_date
列中为每个训练插入最旧的 date
对应的训练实例。
最好的方法是什么?
首先,使用
创建列alter table public.trainings add "start_date" date null;
然后,尝试执行这个查询
update trainings
set start_date = (select min(ti.date) from training_instances ti where
trainings.team_id = ti.team_id and
trainings.id = ti.training_id)