-2
votes

T-SQL Sélectionner une requête avec l'aide des dates

mise à jour

Je pense qu'il y a une solution plus facile qui sauvera également le temps de traitement. Je pourrais simplement supprimer tous les enregistrements qui ont Statut = 'Traditionné' et Status = 'En cours' avant terminé.

De cette façon, je n'ai que simplement à interroger à la première_value où statut = "en cours".

Comment j'écrirais-je?


Je travaille sur une base de données. J'ai une table avec des archives comme suit les citations décrivant la saisie des colonnes, la mise au point de ma question est à jour et à statut

  • nom "nom d'utilisateur est auto-rempli de CSV"
  • Lieu "NC, SC, NJ, etc."

  • ville "Carthage, Myrtle Beach, etc."

  • Date "Date d'entrée est entré automatiquement par SQL lors de l'importation de CSV en format année-mm-dd"
  • Statut "en cours ou terminé sont les deux seules entrées"

    la date date colonne et Statut Les colonnes sont mises à jour régulièrement.

    J'ai besoin de mon Sélectionner une requête distincte pour renvoyer l'enregistrement d'ici la première date lorsque la colonne d'état = "en cours". Cette partie, je sais faire. Toutefois, chaque fois qu'une colonne d'état des enregistrements va à "Terminé" un jour et qu'un nouvel enregistrement est ajouté ultérieurement avec l'état en cours, je vois le premier enregistrement dans lequel le champ d'état = "en cours".

    J'ai joint un visuel de ce dont je parle. J'ai besoin de ma requête pour retourner la 3ème boîte de la gauche et non la première.

     visuel de ce que je parle de


3 commentaires

Peut-être correspondant contre max (date) .


Veuillez lire pour quelques conseils sur l'amélioration de votre question.


Stackoverflow.com/help/how-to-ask


3 Réponses :


0
votes

Vous pouvez utiliser une sous-requête qui renvoie la date minimale lorsque l'état était 'en cours et après quoi aucun enregistrement avec statut terminé existe, comme: xxx


2 commentaires

Cela n'a pas fonctionné, les résultats que je tire sont des enregistrements qui n'ont que plusieurs statuts «en cours». L'autre partie que j'ai oubliée de mentionner est que chaque enregistrement initial ne commencera pas par "Terminé". Et si je supprime tous les enregistrements du dernier statut terminé pour cet ensemble d'enregistrements? Je traite les données des lots, de sorte qu'il ne serait donc pas difficile d'obtenir un agent SQL de courir pour moi.


@JT: Il est difficile de comprendre exactement ce que vous attendez ... veuillez mettre à jour votre question avec des données d'échantillonnage et une sortie attendue afin que nous puissions essayer de fournir une réponse appropriée.



0
votes

Pour paraphraser ...

  • Vous voulez un enregistrement par Nom, emplacement, ville code> combinaison? LI>
  • Cet enregistrement doit être en soi Statut = 'en cours' code> mais ne pas avoir d'enregistrement immédiatement avant avec Statut = "en cours" code>. Li>.
  • de ces enregistrements potentiels, vous voulez le dernier. li> ul>

    Utilisation de fonctions analytiques Vous pouvez le faire ... p> xxx pré>

    Bien que ce soit un code plus long que l'utilisation d'un n'existe pas () code > Subquier en corrélation, cela devrait minimiser le coût à exécuter, de même potentiellement plus rapide. P>

    Pour une performance maximale, vous pouvez avoir un seul index sur ... P>

    CREATE INDEX
        mytable_nlcds
    ON mytable (
        name,
        location,
        city,
        date DESC,
        status
    )
    


0 commentaires

0
votes

donc,

J'ai essentiellement créé deux tables. Une avec toutes en cours et une autre avec toutes complétées.

Ensuite, j'appuie simplement de nouveaux enregistrements à ma table rempli, puis exécutez une création à la base de SELECT * Last_Value ([T1.Date]). Ensuite, j'exécute une suppression gauche rejoignez la table en cours sur la table complète par nom et ville, où T1.Date> T2.Date.

Cela a résolu le problème pour moi. C'est une étape supplémentaire, mais il court rapidement et gardera ma taille de données faible.

Merci à tous pour vos suggestions!


0 commentaires