Bonjour à tous,

Actuellement en alternance en 2ème année de DUT, j'effectue des requêtes sous sql server. Je m'en remets à vous car j'ai beau chercher, je ne trouve pas ma réponse et mon tuteur est en vacance donc il ne peut pas m'aider...

En gros j'ai une table sur laquelle j'ai des données, elle s'appelle 'factweeklyinventory'.
Voici sa composition :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
timeId
ProductID
ShipperID
quantity
supplierPurchasePriceValue
PurchasePriceValue
revenueValue
OutOfStock
salesQuantity
salesPeriod
saleQuantity_W_1
lastEntry
firstEntry
firstExpectedQty
firstExpectedDate
firstExpectedDelay
nextExpectedQty
nextExpectedDate
nextExpectedDelay
supplierDelay
shopSalesQuantity
shopNumber
targetRotationDay
rotationClass
Les champs qui m'intéresse sur cette table sont le timeid, productid, shipperid uniquement.

Il se trouve qu'un utilisateur aimerait avoir un nouveau champ, currentshippertype qui serait pareil que le shipperid mais à la dernière date donnée d'un produit.
En effet, les données de la table factweeklyinventory sont historisées de façon hebdomadaire, donc on a le shipper pour un produit chaque samedi.
Cependant, l'utilisateur souhaite obtenir un shipper pour ce meme produit mais à la date à jour pour faire des comparaisons.

Les autres tables dont j'ai besoin pour construire ce nouveau champ sont : bc, bc_prod, shipper

La requête qui permet d'avoir la date avec le shipper correspondant à la date pour le produit :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
select dat, product_ref, shipper from bc
inner join bc_prod on bc.id=bc_id
inner join shipper on bc.shipper=shipper.name and main=1
order by dat desc
Voici la requête que j'ai essayé de faire mais ça ne donne rien de concluant :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
select timeid, productid, dat, shipperid, shipper as currentshippertype
from bc 
inner join bc_prod on bc.id=bc_id
inner join shipper on bc.shipper=shipper.name and main=1
inner join FactWeeklyInventory on FactWeeklyInventory.productid=bc_prod.product_ref and FactWeeklyInventory.timeid=dat
where datepart(weekday,cast(bc.DAT as datetime))=7
J'obtiens en effet peu de lignes par rapport à ce que je suis censé avoir (138 170 lignes).

Ma table factweeklyinventory comporte 966 865 lignes et comme vous l'avez compris il faut que ma jointure permette d'obtenir un currentshippertype pour chaque ligne avec la date à jour.
J'espère avoir été assez clair dans mon problème ^^
Je ne sais pas si la jointure est la meilleur option ? un curseur serait-il plus judicieux ?

Merci à tous ceux qui éclaireront ma lanterne.

Kent69003