Entrée:
id name value1 value2 date 1 A 1 Avg(value2) 2019-07-13 2 B 2 Avg(value2) 2019-07-13 3 C 1 Avg(value2) 2019-07-13
Résultat attendu:
id name value1 value2 date 1 A 1 1 2019-01-01 1 A 2 2 2019-02-15 1 A 3 3 2019-01-15 1 A 1 1 2019-07-13 2 B 1 2 2019-01-01 2 B 1 3 2019-02-15 2 B 2 1 2019-07-13 3 C 2 4 2019-02-15 3 C 1 2 2019-01-01 3 C 1 9 2019-07-13 3 C 3 1 2019-02-15
3 Réponses :
Vous pouvez utiliser les fonctions de fenêtre. rank () over ()
peut être utilisé pour identifier le premier enregistrement de chaque groupe, et avg () over ()
vous donnera une moyenne de fenêtre de value2
dans chaque groupe:
select id, name, value1, avg_value2 value2, date from ( select t.*, avg(value2) over(partition by id, name) avg_value2, rank() over(partition by id, name order by date desc) rn from mytable t ) t where rn = 1
Merci qui a été utile et comment pourrais-je le faire au niveau de l'année
Comme si la date est 2019-07-13 value1 = 5 et la date est 2019-09-13 value = 3. J'ai besoin d'obtenir la date maximale et la valeur pour cette date. Comment pourrais-je le faire? La sortie sera: - 2019-09-13 value1 = 3
@Anonymous: oui la requête fait ça. Il vous donne l'enregistrement qui a la date la plus élevée pour chaque tuple id / nom. Vous pouvez essayer de l'exécuter sur vos données réelles pour voir les résultats par vous-même.
triez vos données de la bonne manière, utilisez la fonction window row_number () comme identifiant et sélectionnez la première entrée de chaque partition.
with temp_data as ( select row_number() over (partition by debug.tbl_data.id order by debug.tbl_data.date desc) as index, *, avg(debug.tbl_data.value2)over (partition by debug.tbl_data.id) as data_avg from debug.tbl_data order by id asc, debug.tbl_data.date desc ) select * from temp_data where index = 1
Vous semblez vouloir la valeur la plus courante de value1
. En statistique, cela s'appelle le «mode». Vous pouvez le faire comme:
select id, name, mode() within group (order by value1) as value1_mode, avg(value2), max(date) from t group by id, name;
Veuillez modifier vos entrées de moyenne (valeur2) pour afficher la moyenne attendue. Par exemple. est la valeur moyenne2 pour 3 valeurs comprises ou exclues après la date spécifiée?