J'ai actuellement une instruction sql qui fonctionne en agrégeant certaines données pour obtenir une sortie de plusieurs lignes (et non un simple calcul max/min) sur un sous-ensemble d'une table ayant le même identifiant. La capture suivante calcule les trajets effectués par un identifiant spécifique en fonction du moment où un emplacement change.Création de vue PostgreSQL en exécutant plusieurs sous-requêtes
WITH id_locations AS (
SELECT created_at, id, location
FROM locations
WHERE id = 1
), travel_locations AS (
SELECT created_at, id, location, ROW_NUMBER() OVER(ORDER BY created_at) AS row_num
FROM id_locations
WHERE
created_at IN (
SELECT min(created_at)
FROM id_locations
GROUP BY location
) OR created_at IN (
SELECT max(created_at)
FROM id_locations
GROUP BY location
)
)
SELECT a.id id, a.created_at departed_at, b.created_at arrived_at, a.location departure_location, b.location arrival_location
FROM travel_locations AS a
INNER JOIN travel_locations AS b
ON a.row_num = b.row_num - 1
WHERE a.location <> b.location;
Data
id created_at location
1 1 1
1 2 1
1 3 2
1 4 2
1 5 5
1 6 5
1 7 5
1 8 5
2 1 1
2 2 1
2 3 1
2 4 1
2 5 3
2 6 3
2 7 3
2 8 3
Desired Output
id departed_at arrived_at departure_location arrival_location
1 2 3 1 2
1 4 5 2 5
2 4 5 1 3
Je voudrais créer une vue qui contient la sortie de cette instruction SQL, couru sur chaque sous-ensemble de la table groupée par id
Est-il possible de le faire avec sql cru, ou si J'ai besoin d'itérer sur tous les id possibles avec un client sql, exécuter la même requête, et insérer le résultat dans une table pour référence future?
J'utilise postgresql 9,6 pour référence
Vos identifiants sont-ils uniques? – ekaerovets
Je pense que vous cherchez 'group by'. poster quelques exemples de données et le résultat attendu. –
Non, ce n'était probablement pas le meilleur nom de colonne pour un exemple .. L'instruction id_group sera probablement composée de plusieurs lignes, et l'instruction que j'exécute nécessite que je regarde un sous-ensemble avec un seul identifiant –