-1
votes

Comment filtrer ma table en fonction de ces critères de date spécifiques?

J'utilise SQL Server 2014 code>. Ci-dessous est un extrait de table t1 code>: xxx pré>

Le problème: j'ai besoin de filtrer cette table afin que la sortie ne me donne que ces rangées d'un invité où la différence / s entre son arrivéeDate (à Rownum 2 ou 3 ou 4 ...) et son départ (à Rownum = 1) est supérieur à 0. P>

Pour simplifier: Si nous prenons invité John, son arrivéeDate pour ROWNUM = 2 et ROWNUM = 3 sont les mêmes identiques que son départage pour Rownum = 1; Par conséquent, je veux l'exclure complètement dans ma sortie. Même chose pour invité Allan. Cependant, pour invité Smith uniquement là où le rownum = 2 doit être exclu. P>

Remarque: tous les invités de cette table auront au moins un rownum = 2 (c'est-à-dire un minimum de 2 entrées).

Ma sortie attendue: P>

 rownum     RoomID    ArrivalDate     DepartureDate   Name    GuestID
   1         400       2020-05-01      2020-05-10     Joe       225
   2         155       2020-06-13      2020-06-18     Joe       225
   1         200       2020-07-01      2020-07-08     Smith     980         
   3         428       2020-09-01      2020-09-05     Smith     980


3 commentaires

Pouvez-vous nous montrer votre requête actuelle?


Que diriez-vous de la ligne num = 1, vous devez l'obtenir aussi bien?


@Jimmacaulay Oui, j'en ai besoin aussi.


3 Réponses :


0
votes

Veuillez utiliser ci-dessous la requête et confirmer si c'est ce que vous attendez,

select * from table where (ArrivalDate, Name) not in
(select DepartureDate, Name from table);


2 commentaires

Je reçois le message d'erreur suivant (avec l'arrivéeDate étant souligné): une expression de type non booléen spécifié dans un contexte où une condition est attendue, près de ",".


Est-ce que vos noms de colonnes sont corrects?



0
votes
    select * from (
    select * from #Aridept Ari
    where rownum=1 and GuestID in ( select GuestID from #temp)
    union all
    select * from #temp
    )a order by GuestID, rownum

0 commentaires

1
votes

Le truc ici semble conserver la première ligne lorsque vous y trouverez une correspondance - mais n'incluant aucune ligne de rangée autrement. Vous pouvez utiliser les fonctions de fenêtre: xxx

ici est un dB <> violon.


1 commentaires

Merci beaucoup! Vous avez manqué l'alias t après T1. Dans le violon, ça marche bien.