Précédent   Forum des professionnels en informatique > Bases de données > MS SQL-Server > Développement
Développement Forum d'entraide sur le Transact-SQL, le CLR, les procédures stockées, les triggers, les requêtes SQL
Partagez cette discussion sur d'autres réseaux sociaux : Viadeo Twitter Google Facebook Digg Delicious MySpace Yahoo
Réponse Proposer ce sujet en actualité
 
Outils de la discussion
Publicité
'
Vieux 21/09/2011, 16h22   #1
Candidat au titre de Membre du Club
 
Inscription : juin 2005
Messages : 52
Détails du profil
Informations forums :
Inscription : juin 2005
Messages : 52
Points : 13
Points : 13
Par défaut Question sur TOP ou autre commande

Bonjour à tous,

Je suis sous SQL 2005

J'ai une table avec un numéro de palette,sa référence, son emplacement, date FIFO

Je voudrais sortir par la liste des trois plus vieilles palettes de CHAQUE référence.

Select TOP ... me sort les trois plus vieilles pour l'ensemble de la table.

Je ne vois pas comment faire ?

Si Elsuket passe par ici


Merci d'avance à tous
boutinj est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 21/09/2011, 17h02   #2
Membre Expert
 
Homme Sylvain Devidal
Chef de projets Générix
Inscription : février 2010
Messages : 1 062
Détails du profil
Informations personnelles :
Nom : Homme Sylvain Devidal
Âge : 33
Localisation : France, Rhône (Rhône Alpes)

Informations professionnelles :
Activité : Chef de projets Générix
Secteur : High Tech - Éditeur de logiciels

Informations forums :
Inscription : février 2010
Messages : 1 062
Points : 1 515
Points : 1 515
Fonctions analytiques :
http://lalystar.developpez.com/fonctionsAnalytiques/

Il faut mixer les infos de l'article avec celles de la MSDN, l'article ayant été fait pour Oracle, certaines choses ne marchent pas du premier coup. Mais ça répondra à ton problème.
StringBuilder est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 21/09/2011, 17h53   #3
Modérateur

 
Avatar de elsuket
 
Homme Nicolas Souquet
Administrateur de base de données
Inscription : janvier 2005
Messages : 4 669
Détails du profil
Informations personnelles :
Nom : Homme Nicolas Souquet
Âge : 30
Localisation : Thaïlande

Informations professionnelles :
Activité : Administrateur de base de données
Secteur : High Tech - Éditeur de logiciels

Informations forums :
Inscription : janvier 2005
Messages : 4 669
Points : 8 729
Points : 8 729
Citation:
Envoyé par boutinj
Si Elsuket passe par ici
Bah y'a pas que moi sur le forum quand même

Je considère la table suivante :

Code :
1
2
3
4
5
6
7
CREATE TABLE palette
(
	numero_palette int NOT NULL CONSTRAINT PKpalette PRIMARY KEY
	, reference_palette char(6) NOT NULL
	, numero_emplacement int NOT NULL CONSTRAINT FKpalette FOREIGN KEY (numero_emplacement) REFERENCES dbo.emplacement
	, time_stamp datetime NOT NULL
)
La requête est donc :

Code :
1
2
3
4
5
6
7
8
9
10
11
12
13
14
;WITH
	CTE AS
	(
		SELECT	reference_palette
			, numero_palette
			, time_stamp
			, ROW_NUMBER() OVER(PARTITION BY reference_palette ORDER time_stamp) AS n
		FROM	dbo.palette
	)
SELECT	reference_palette
	, numero_palette
	, time_stamp
FROM	CTE
WHERE	n <= 3
@++
__________________
En bases de données relationnelles SQL, il n'y a ni tableaux, ni enregistrements, ni champs: il y a des tables, des lignes et des colonnes.
Blog | Profil| Consulter ou télécharger les fichiers d'aide de SQL Server, des versions 2000 à 2012
elsuket est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 22/09/2011, 08h44   #4
Candidat au titre de Membre du Club
 
Inscription : juin 2005
Messages : 52
Détails du profil
Informations forums :
Inscription : juin 2005
Messages : 52
Points : 13
Points : 13
Merci beaucoup à vous deux.

La solution de Elsuket est impeccable, je pensais pas que je pouvais faire une CTE sans UNION pour le point d'ancrage).

Du coup j'ai plein de nouvelles idées.

Merci encore.
boutinj est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 22/09/2011, 15h42   #5
Modérateur

 
Avatar de elsuket
 
Homme Nicolas Souquet
Administrateur de base de données
Inscription : janvier 2005
Messages : 4 669
Détails du profil
Informations personnelles :
Nom : Homme Nicolas Souquet
Âge : 30
Localisation : Thaïlande

Informations professionnelles :
Activité : Administrateur de base de données
Secteur : High Tech - Éditeur de logiciels

Informations forums :
Inscription : janvier 2005
Messages : 4 669
Points : 8 729
Points : 8 729
Citation:
La solution de Elsuket est impeccable, je pensais pas que je pouvais faire une CTE sans UNION pour le point d'ancrage).
Vous avez écrit une CTE récursive ?

@++
__________________
En bases de données relationnelles SQL, il n'y a ni tableaux, ni enregistrements, ni champs: il y a des tables, des lignes et des colonnes.
Blog | Profil| Consulter ou télécharger les fichiers d'aide de SQL Server, des versions 2000 à 2012
elsuket est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 27/09/2011, 22h38   #6
Membre Expert
 
Avatar de iberserk
 
Homme Bruno IGNACE
Architecte de base de données
Inscription : novembre 2004
Messages : 1 299
Détails du profil
Informations personnelles :
Nom : Homme Bruno IGNACE
Âge : 30
Localisation : France, Gironde (Aquitaine)

Informations professionnelles :
Activité : Architecte de base de données
Secteur : High Tech - Éditeur de logiciels

Informations forums :
Inscription : novembre 2004
Messages : 1 299
Points : 2 282
Points : 2 282
Envoyer un message via MSN à iberserk
Citation:
La solution de Elsuket est impeccable, je pensais pas que je pouvais faire une CTE sans UNION pour le point d'ancrage).
Manifestement on a affaire à un vrai fan là!
Avec lettre anonyme et tout et tout :-)
__________________
Prendre conscience, c'est transformer le voile qui recouvre la lumière en miroir.
iberserk est déconnecté   Envoyer un message privé Réponse avec citation 00
Réponse Proposer ce sujet en actualité Cette discussion est résolue.
Outils de la discussion



Fuseau horaire GMT +2. Il est actuellement 17h24.


 
 
 
 
Partenaires

Hébergement Web