Donc, je suis sûr qu'il y a une solution simple ici, mais je ne peux pas le faire fonctionner. J'ai actuellement deux tables structurées comme suit:
SELECT avg(x), avg(y), avg(z) FROM table1 Where table1.Date in(SELECT * FROM table2 WHERE table1.date BETWEEN table2.date AND table2.date - DATEADD(day, 7, table2.date) GROUP BY table1.Name = table2.Name
3 Réponses :
Je pense que cela devrait donner les résultats attendus. Je suppose que c'est SQL Server afin qu'il fonctionne dans SQL Server
SELECT t.name,avg(x), avg(y), avg(z) FROM table1 t Where exists (select 1 from table2 t2 where t2.name = t.name and t.date between dateadd(day, -7, t2.date) and t2.date ) GROUP BY t.name
Vous ne voudriez pas utiliser une instruction code> dans code>. Vous souhaitez comparer les données de chaque table, mais vous n'avez besoin que de la sortie de l'une des tables. Dans ce cas, je recommanderais d'utiliser un Existe code>. Veuillez noter que je suppose que vous utilisez SQL Server. -- utilizing an exists statement because the rows from tbl2 aren't needed for the output, only the comparison with tbl1 data
select a.Name Name
,avg(X) Avg_X
,avg(Y) Avg_Y
,avg(Z) Avg_Z
from tbl1 a
where exists(select * from tbl2 b where b.Name = a.Name and a.Dt between dateadd(day,-7,b.Dt) and b.Dt)
group by a.Name
Sélectionner
T1.Name, t1.Date Sélectionner
En # Temp1
de T1 rejoindre t2 où
t1.name = t2.name et t1.date> = datadad (jour, -7, t2.date) et t1.date <= t2.date
t1. Nom, t1.date, avg (x) en tant qu'AVGX, AVG (Y) en tant qu'AVG (Y), AVG (Z) en tant qu'AVGZ
de # Temp1 rejoindre t1 sur # temp1.date = t1.date et # temp1.name = T2.Name
"SQL" est différent pour chaque base de données - Veuillez choisir une balise qui identifie la base de données que vous avez besoin de la solution pendant 5.
Au fait, l'ordre des valeurs utilisée avec
entre code> vraiment compte. La valeur plus petite / inférieure / antérieure doit être d'abord (par exemple,entre 99 et 1 code> ne fonctionnera pas, maisentre 1 et 99 code> fonctionne)"J'ai deux tables", mais vous ne montrez qu'un seul. C'est un peu déroutant.