J'ai une table avec les données suivantes:auto JOIN sur des données variables
Fiscal Year | Fiscal Quarter | Fiscal Week | Data
2009 | 2 | 22 | 9.5
2009 | 2 | 24 | 8.8
2009 | 2 | 26 | 8.8
2009 | 3 | 28 | 8.8
2009 | 3 | 31 | 9.1
2009 | 3 | 33 | 8.8
Je voudrais écrire une requête qui produirait les éléments suivants:
Fiscal Year | Fiscal Quarter | Fiscal Week | Data | Trend
2009 | 2 | 22 | 9.5 | NULL
2009 | 2 | 24 | 8.8 | -0.7
2009 | 2 | 26 | 8.8 | 0
2009 | 3 | 28 | 8.8 | 0
2009 | 3 | 31 | 9.1 | 0.3
2009 | 3 | 33 | 8.8 | -0.3
Je sais que cela peut être facilement réalisé en faisant une simple jointure de la table à lui-même avec la semaine fiscale précédente, cependant ce ne sera pas toujours un simple t1.[Fiscal Week] = t2.[Fiscal Week] - 2
parce que parfois la différence est de 3 semaines.
je peux tirer le maximum dossier facilement avec quelque chose comme ceci:
SELECT
MAX(t1.[Fiscal Week]) "LastWeek"
FROM t1
WHERE t1.[Fiscal Year] = 2009
AND t1.[Fiscal Week] < 31
Mais je suis à une perte quand il vient à abstraire pour faire le travail rejoindre. Comment puis-je faire une auto-jointure sur "la plus grande semaine fiscale qui est plus petite que l'enregistrement actuel"?
Quelle plate-forme de SGBDR utilisez-vous (à savoir sql-server-2000, mysql, sql-server-2005, oracle, etc. – chadhoc
SQL Server 2005. –
Dommage que SQL Server ne prend pas en charge les fonctions LEAD/LAG. –