Comment joindre une table et afficher une colonne en fonction de la date la plus récente et d'une condition dans deux autres colonnes?

Smashley

J'essaye de joindre deux tables sur leur customerID. J'ai un tableau des informations client et un tableau des informations d'achat. Dans la table jointe, je souhaite qu'une colonne affiche les informations d'achat les plus récentes pour ce client. Cependant, certains clients n'ont pas encore effectué d'achat ... Je souhaite que ce champ reste vide ou nul. De plus, je souhaite uniquement afficher les achats de type A, pas les achats de type B.

J'ai trouvé une solution pour afficher le dernier enregistrement, mais je ne peux pas le faire afficher null si le client n'a pas d'enregistrement (cela supprime simplement ce client de la table de jointure complètement au lieu de laisser un champ nul ... peu importe de type de jointure):

SELECT c.*, p1.*
FROM customer c
JOIN purchase p1 ON (c.id = p1.customer_id)
LEFT OUTER JOIN purchase p2 ON (c.id = p2.customer_id AND 
    (p1.date < p2.date OR p1.date = p2.date AND p1.id < p2.id))
WHERE p2.id IS NULL and p2.purchase_Type = 'A';

Disons que mes champs sont: customerTable: customer_ID, customer_Name purchaseTable: customer_ID, purchase_Type (A ou B), purchase_Price, purchase_Notes.

Je veux que ma table de jointure affiche: customer_ID, Customer_Name, purchase_Price (le plus récent), purchase_Notes (le plus récent)

pour chaque client de ma table client, même s'il n'a pas effectué d'achat, et je souhaite que le purchasePrice et le purchaseNotes s'affichent uniquement pour les achats de type A, sinon le champ est laissé nul

Gordon Linoff

Utilisez les fonctions de fenêtre ou apply. Le dernier:

SELECT c.*, p.*
FROM customer c OUTER APPLY
     (SELECT TOP (1) p.*
      FROM purchase p 
      WHERE p.customer_id = c.id and p.type = 'A'
      ORDER BY date DESC
     ) p;

Cet article est collecté sur Internet, veuillez indiquer la source lors de la réimpression.

En cas d'infraction, veuillez [email protected] Supprimer.

modifier le
0

laisse moi dire quelques mots

0commentaires
connexionAprès avoir participé à la revue

Articles connexes

TOP liste

  1. 1

    Redirection HTTP vers HTTPS dans Java à l'aide de HTTPURLConnection

  2. 2

    Uncaught TypeError: map n'est pas une fonction dans Reactjs avec Firebase

  3. 3

    Laravel SQLSTATE [HY000] [1049] Base de données inconnue 'previous_db_name'

  4. 4

    Comment envoyer plusieurs variables de la lame au contrôleur

  5. 5

    Microsoft.WebApplication.targets

  6. 6

    Comment analyser un fichier avec un tableau d'objets JSON en utilisant Node.js?

  7. 7

    Comment définir du texte dans un QLabel et afficher les caractères '<>'?

  8. 8

    Concaténer des variables dans ansible

  9. 9

    Filtrer les données en fonction des conditions d'une trame de données

  10. 10

    Échec de l'exécution de 'insertBefore' sur 'Node': le paramètre 1 n'est pas de type 'Node'

  11. 11

    ESP8266 HADRWARE MINUTERIE, USA pour cocher une macro étrange

  12. 12

    Comment changer le navigateur par défaut en Microsoft Edge pour Jupyter Notebook sous Windows 10 ?

  13. 13

    Comment centrer un div tout en utilisant la transition et transformer avec l'échelle

  14. 14

    Stop jQuery execution after one time execution

  15. 15

    obtenir le nombre de marqueur affiché sur la carte

  16. 16

    System.Data.SqlClient.SqlException: 'Nom de colonne non valide' ApplicationRoleId '.'

  17. 17

    Générer une variable binaire avec une corrélation prédéfinie avec une variable déjà existante

  18. 18

    comment afficher un bouton au-dessus d'un autre élément ?

  19. 19

    Enregistrer le chemin de l'image de la galerie vers la base de données de la salle et l'afficher dans la liste des recycleurs

  20. 20

    php ajouter et fusionner des données de deux tables

  21. 21

    Comment utiliser le stockage local et le supprimer lorsqu'il n'est pas nécessaire

chaudétiquette

Archive