Je souhaite récupérer uniquement la toute première transaction datée de processus pour chaque identifiant de l'utilisateur dans ce cadre de temps désigné qui se trouvait dans une année de 1 an de l'achat_date.
de ce que nous avons: p> ceci: p> Ce que je veux, est-il limité à cela comme celles-ci Vous trouverez ci-dessous les seules transactions de la liste qui ont eu la date de processus de leurs transactions dans un délai d'un an de la date d'achat et ont été d'abord parmi ces transactions, même s'il y en avait un autre pour le même utilisateur dans ce cadre, c'est-à-dire exclure tout et tout ce qui ne fait pas Ajustez ces critères: P> User ID Transaction Purchase Date Process Date
ZZ1316567 41004401606 10/4/2018 1/9/2019
SS1456449 51004292754 3/24/2017 6/7/2017
3 Réponses :
vous pouvez faire avec rang_number code> aussi
Cela ne renvoie pas que la toute première transaction datée de processus pour chaque identifiant de l'utilisateur dans ce cadre de temps désigné qui se trouvait dans une année de 1 an de l'achat_date
Dans les cas où vous voulez seulement que les premiers enregistrements «N» soient retournés, l'application extérieure () est très agréable. Cette syntaxe est T-SQL:
select distinct
t.UserID,
x.[Transaction],
t.PurchaseDate,
x.ProcessDate
from
Table1 t
outer apply
(select top 1
[Transaction],
t1.ProcessDate
from
Table1 t1
where
t1.UserID = t.UserID
and datediff(day, t1.PurchaseDate, t1.ProcessDate) <= 365
and t1.PurchaseDate between DATEADD(YEAR,-4,GetDate()) and getdate()
order by t1.ProcessDate
) x
where
x.[Transaction] is not null
;
Vous pouvez utiliser ci-dessous la requête pour obtenir les informations.
Nous appliquons l'ordre de deux clauses: p>
daturant (année, acheté, processdate) = garantit que moins d'un an est commandé d'abord p> li>
daturant (jour, acheté, processdate) = garantit que moins de jours sont commandés d'abord p> li>
ul> li>
ul>
Merci pour vos efforts et cela ressemblait à ce serait la bonne réponse. Cependant, j'ai le même problème dans lequel il s'agit de dates de processus supérieures à 1 an, à l'exception de la date d'achat au cours des 5 dernières années. Il est cependant satisfaisant à la condition de tirer une seule ligne par acheteur. Quelque chose d'autre que vous pouvez penser?
Votre logique ne peut pas retourner plusieurs lignes pour un seul utilisateur.
La logique initiale fait en raison de l'ID de transaction unique
. . Quelles que soient les autres colonnes,
row_number () code> ne doit renvoyer qu'une valeur "1" pour chaqueuser_id code>.Tu as raison, j'ai vérifié ma requête réelle ... j'ai aussi corrigé ma question :)
commander par process_date code>Note latérale - Je suis sûr que
distinct code> est rendu inutile paroù l'unicité = 1 code>.J'ai édité la question initiale pour donner plus de perspectives. J'espère que cela aide toutes les réponses potentielles