2017-10-19 2 views
0

J'ai une table projects avec une colonne d'horodatage started_at et une table tasks avec les colonnes project_id et started_at.Mettre à jour la colonne datetime SQL avec les valeurs les plus anciennes d'une autre colonne de table?

est-il un moyen de mise à jour de masse avec une seule requête les projects lignes pour définir started_at avec les started_at valeurs les plus anciennes de la table tasks?

Par exemple, si la table tasks a les lignes:

project_id | started_at 
1   | 2010-01-01 
1   | 2015-01-01 
2   | 2000-01-01 
2   | 2020-01-01 

exécution de la requête mettrait à jour la table projects comme celui-ci

id | started_at 
1 | 2010-01-01 
2 | 2000-01-01 

J'utilise PostgreSQL.

+0

Non, je ne pas enlever toutes les lignes. Mettez à jour les lignes de la table 'projects', en fonction des valeurs de la table' tasks'. – Florent2

+0

Parce qu'avant d'exécuter la requête, il avait déjà seulement 2 lignes. – Florent2

Répondre

1
UPDATE projects 
SET started_at = OldestDate 
FROM 
(
    SELECT project_id, MIN(started_at) AS OldestDate 
    FROM tasks 
    GROUP BY project_id 
) AS t 
WHERE t.project_id = id; 

Demo