-1
votes

MySQL ne montre que des modifications uniques à la colonne

Vous ne savez pas si ceci est une requête facile ou non, mais pour une raison quelconque, je ne peux pas comprendre ...

J'ai cet enregistrement des modifications de statut de l'ordre décroissant (plus ancien au plus récent): P> XXX PRE>

mais je veux seulement retourner Changements de forts> à la colonne CODE> STATUS CODE>, donnez-moi une liste de fois que le statut a été modifié. Donc, la réponse serait aussi: p>

SELECT
      Instrument.Name AS Name,
      Status.Name AS Status,
      Operation.Time AS Time,
FROM Operation
      INNER JOIN Instrument ON Instrument.Id = Operation.InstrumentId
      INNER JOIN Status ON Status.Id = Operation.StatusId
WHERE Instrument.Name = ?;


0 commentaires

3 Réponses :


2
votes

Idéalement, vous voulez Lag () et pour sélectionner à partir de celui-ci. Permettez-moi de supposer que vous êtes pré-v8 de mysql.

Une méthode est une sous-requête corrélée: xxx

dans les versions plus récentes de MySQL, vous pouvez simplement faire: xxx


2 commentaires

Merci pour la réponse rapide! (Fyi je suis sur MySQL 5.7) J'essaye cela maintenant, mais je suis en train de courir à certains problèmes puisque ma requête fait également d'autres adhésions (bien que je ne pensais pas que cela importait de la solution globale) la question à ajouter plus de détails.


Vient de mettre à jour la question. J'ai essayé d'utiliser ma requête à la place du second Sélectionnez T. * Vous avez écrit, mais ne semble pas que c'est comme ça que c'est la façon de le faire ... Je suppose que le 3ème SELECT devrait rester comme Pour spécifier les colonnes, je filtrant?



0
votes

J'ai fait un peu générique essai avec la requête externe en cours d'exécution à la ligne correspondant au résultat de la sous-pérature via Groupes CODE> La sortie est la façon dont les lignes ne sont pas correctement triées. Peut vérifier si cela fonctionne pour vous.

      SELECT
      Instrument.Name AS Name,
      DISTINCT(Status.Name) AS Status,
      Operation.Time AS Time,
FROM Operation
      INNER JOIN Instrument ON Instrument.Id = Operation.InstrumentId
      INNER JOIN Status ON Status.Id = Operation.StatusId
WHERE ( Name,
      Status,
      Time ) 
      IN
   (SELECT
      Instrument.Name AS Name1,
      Status.Name AS Status1,
      Operation.Time AS Time1,
FROM Operation
      INNER JOIN Instrument ON Instrument.Id = Operation.InstrumentId
      INNER JOIN Status ON Status.Id = Operation.StatusId
     group by NAME1, Status1 having Time1=min(Time1)
   )


0 commentaires

0
votes

Une autre approche utilise une table pseudo temporaire (impossible d'utiliser une table temporaire réelle car MySQL n'autorisera pas de multiples sous-candidats à l'une) c'est-à-dire la table d'origine avec un "numéro de rangée" en annexé comme clé primaire: < Pré> xxx

puis la requête devient simplement: xxx


0 commentaires