-3
votes

Sélectionnez la date récente pour plusieurs téléphones

req: si plusieurs téléphones ont la même date la plus récente, prenez le téléphone avec le nombre le plus bas. Mes données sont comme ci-dessous.

CustomerID  PhoneNumber  CreatedDate
 1111         1234587     2013-09-10
 2222         4726722     1998-06-18


2 commentaires

Modifier la question Ajouter une sortie d'échantillon en fonction des données d'échantillon.


Retournez à quiconque vous a donné cette exigence et demandez des éclaircissements. Aucune des lignes de vos données n'a la même date.


4 Réponses :


0
votes

Utilisez deux sous-requêtes pour déterminer la date maximale et le numéro de téléphone min et les rejoindre avec la table elle-même

SELECT a.CustomerID, a.PhoneNumber, a.CreatedDate
FROM test a
JOIN (SELECT CustomerID, MAX(CreatedDate) as max_date
      FROM test 
      GROUP BY CustomerID) b ON b.CustomerID = a.CustomerID AND
                                b.max_date = a.CreatedDate
JOIN (SELECT CustomerID, CreatedDate, MIN(PhoneNumber) min_number
      FROM test 
      GROUP BY CustomerID, CreatedDate) c ON c.CustomerID = a.CustomerID AND 
                                             c.min_number = a.PhoneNumber AND 
                                             c.CreatedDate = a.CreatedDate


6 commentaires

Merci pour l'aide! Mais lorsque nous disons le top 1 de la table, cela ne donnera qu'une seule valeur. Mais ma sortie devrait être comme pour un seul numéro de téléphone d'ID client doit être basé sur la date de création. Toute suggestion s'il vous plaît.


@Nagasushmakallam j'ai mis à jour ma réponse maintenant que je ferais mieux de comprendre la question


@Nagasushmakallam tous les commentaires à ce sujet?


Merci pour l'aide! J'ai utilisé le rang () sur la partition par fonction pour obtenir le résultat précis.


@NagasushMakAllam peut-être que vous pourriez poster votre solution comme une réponse pour aider les autres.


Et voici la solution. Sélectionnez * dans #TestStemp à partir de (sélectionnez CustomerID, Phonenumber, créatedDate, classement () sur (Partition par la commande clientId par CreatedDate Desc, Phonenumber ASC) Rank_nbr de DBO.Yourdble) A Où rang_nbr = 1



0
votes

Cela aide-t-il? XXX


0 commentaires

0
votes

Une autre option utilise l'utilisation du avec les cravates code> Clause in-concert avec Row_Number () code>

Exemple strong> P>

CustomerID  PhoneNumber CreatedDate
2222        7654312     2013-02-05
1111        1243557     2013-09-11


1 commentaires

@Nagasushmakallam heureux d'aider, mais pourquoi accepteriez-vous qui ressemble à la mauvaise réponse?



0
votes

Essayez ceci:

SELECT 
    YT.CreatedDate
    ,MIN(YT.PhoneNumber) 
FROM
    YourTable YT
GROUP BY
    YT.CreatedDate


2 commentaires

Merci pour l'aide @Mili! Mais ma production est basée sur le nombre minimum de créatures non sur phonenumber.


@NagaSushMakAllam Bon d'entendez vous avoir trouvé une solution s'il vous plaît supprimer la marque acceptée de cette réponse, car il est clairement faux et que la réponse incorrecte marquée comme acceptée sera confuse et peut-être trompeuse pour que d'autres lisent cette question à l'avenir (désolé MILI).