J'utilise 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> SQL Server 2014 code>. Ci-dessous est un extrait de table t1 code>: 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 Réponses :
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);
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?
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
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: ici est un dB <> violon. p> p>
Merci beaucoup! Vous avez manqué l'alias t après T1. Dans le violon, ça marche bien.
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.