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 28/04/2011, 09h31   #1
Membre actif
 
Inscription : mai 2004
Messages : 478
Détails du profil
Informations forums :
Inscription : mai 2004
Messages : 478
Points : 154
Points : 154
Envoyer un message via MSN à maysa
Par défaut comparer une date avaec celle de la ligne précédente

Bonjour,

J'ai une table visite (idvis, datevis)

Je veux vérifier que ma date de visite est > à la date de la visite précédente. Mais je ne vois pas du tout comment faire

Code :
1
2
3
4
5
6
7
 
Idvis | datevis |
----------------
1      | 20/01/2010
2      | 15/02/2010
3      | 12/03/2010
4      | 10/03/2010
Ce que je veux c'est faire ressortir la visite ...
Une petite idée ?

merci
maysa est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 28/04/2011, 10h06   #2
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
De manière triviale:

Code :
1
2
3
4
5
 
SELECT idvis,datevis
FROM dbo.visite V1
WHERE datevis>(SELECT datevis FROM dbo.visite V2
                       WHERE V2.idvis=V1.idvis-1)
ou

Code :
1
2
3
4
 
SELECT idvis,datevis,(SELECT datevis FROM dbo.visite V2
                       WHERE V2.idvis=V1.idvis-1)AS LastDateVis
FROM dbo.visite V1
Avec un OUTER APPLY également...
__________________
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
Vieux 28/04/2011, 10h07   #3
Membre Expert
 
Inscription : janvier 2010
Messages : 1 084
Détails du profil
Informations personnelles :
Localisation : France, Rhône (Rhône Alpes)

Informations forums :
Inscription : janvier 2010
Messages : 1 084
Points : 1 573
Points : 1 573
Bonjour,

se baser sur les ID pour définir l'ordre n'est pas une bonne chose. dans tous les cas, pensez que vous pouvez avoir des "trou" dans cette séquence, par exemple dans le cas d'une insertion qui viole une contrainte. idéalement, il faudrait une colonne "ordre"

mais vous pouvez faire ainsi :

Code SQL :
1
2
3
4
5
6
7
8
9
10
 
WITH V AS (
    SELECT Idvis, datevis, ROW_NUMBER() OVER (ORDER BY Idvis) AS RN
    FROM visite
)
SELECT V1.idvis, V1.datevis, V2.idvis AS idvis_suivante, V2.datevis AS datevis_suivante
FROM V V1
LEFT OUTER JOIN V V2
    ON V2.RN = V1.RN + 1
WHERE V1.datevis > V2.datevis


Si vous voulez eviter la fonction de fenetrage, vous pouvez aussi faire ainsi :
Code SQL :
1
2
3
4
5
6
7
8
9
10
 
SELECT V1.idvis, V1.datevis, V2.idvis AS idvis_suivante, V2.datevis AS datevis_suivante
FROM Visite V1
OUTER APPLY (
    SELECT TOP(1) idvis, datevis
    FROM visite
    WHERE idvis > V1.idvis
    ORDER BY idvis
) V2
WHERE V1.datevis > V2.datevis
aieeeuuuuu est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 02/05/2011, 13h31   #4
Membre actif
 
Inscription : mai 2004
Messages : 478
Détails du profil
Informations forums :
Inscription : mai 2004
Messages : 478
Points : 154
Points : 154
Envoyer un message via MSN à maysa
Merci à vous deux... c'est bien complexe tout de même...
maysa est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 03/05/2011, 05h14   #5
Modérateur

 
Avatar de elsuket
 
Homme Nicolas Souquet
Administrateur de base de données
Inscription : janvier 2005
Messages : 4 667
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 667
Points : 8 715
Points : 8 715
Bonjour,

C'est normal puisqu'en SQL il n'y a pas d'ordre ... ni dans les colonnes, ni dans les lignes.

Rappelons que les tables sont une représentation des entités du MCD, lui même représentant des ensembles de données du monde réel.
Un ensemble n'a pas d'ordre.

@++
__________________
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 actuellement connecté   Envoyer un message privé Réponse avec citation 00
Vieux 12/05/2011, 11h52   #6
Membre actif
 
Inscription : mai 2004
Messages : 478
Détails du profil
Informations forums :
Inscription : mai 2004
Messages : 478
Points : 154
Points : 154
Envoyer un message via MSN à maysa
oui... mais ça reste complexe ;-)
maysa est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 12/05/2011, 11h57   #7
Modérateur

 
Avatar de elsuket
 
Homme Nicolas Souquet
Administrateur de base de données
Inscription : janvier 2005
Messages : 4 667
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 667
Points : 8 715
Points : 8 715
Non, c'est votre modèle qui n'est pas adapté à votre besoin

@++
__________________
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 actuellement 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 08h28.


 
 
 
 
Partenaires

Hébergement Web