0
votes

Colonnes moyennes entre la plage de la date d'une table différente

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

sql

3 commentaires

"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 vraiment compte. La valeur plus petite / inférieure / antérieure doit être d'abord (par exemple, entre 99 et 1 ne fonctionnera pas, mais entre 1 et 99 fonctionne)


"J'ai deux tables", mais vous ne montrez qu'un seul. C'est un peu déroutant.


3 Réponses :


1
votes

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 


0 commentaires

0
votes

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


0 commentaires

0
votes

Sélectionner T1.Name, t1.Date
En # Temp1
de T1 rejoindre t2 où
t1.name = t2.name et t1.date> = datadad (jour, -7, t2.date) et t1.date <= t2.date groupe par t1.name, t1.date

Sélectionner
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 groupe de T1. Nom, t1.date


0 commentaires