0
votes

Sélectionnez Dernière ligne à partir d'une requête MySQL

J'ai une requête qui retourne des dates qui ne sont dans aucun ordre. J'ai besoin de sélectionner la dernière ligne de la sous-requête. Le problème est toutes les solutions que je peux trouver en ligne utilise quelque chose comme xxx pré>

qui ne servira pas mon objectif, car il commande d'abord les dates sous forme de descection (ou ASC). P>

Supposons que le qry_doc_date retourne: p> xxx pré>

comme nous pouvons voir que les valeurs retournées ne sont pas correctes. Si j'utilise p> xxx pré>

, il renvoie "2019-07-16" mais j'ai besoin de "2019-05-22" qui est la dernière ligne. P>

Modifier 1: J'essaie de convertir cette requête VBA en MySQL. P>

DLast("arrival_date", "qry_doc_date", "[package_id] = " & Me!lstPackage)


8 commentaires

Les tables ne sont pas des ensembles de commandes. Ce qui est aujourd'hui la dernière ligne, peut être différent de la deuxième seconde suivante en fonction de la manière dont la base de données apporte les données. Vous ne pouvez pas dire quelle est la dernière ligne sauf si vous utilisez ordre par , avez-vous un identifiant pour vous dire quelle est la dernière ligne?


Apparemment pas à ce stade. La requête "qry_doc_date" que j'ai mentionnée inclut en outre plusieurs sous-requêtes dans la hiérarchie qui tombe finalement sur une table "TBL_VOYAGE" qui possède une pièce d'identité et cette colonne d'arrivée. Devrais-je apporter cet identifiant ici? En outre, vous voulez dire que je pourrais obtenir des résultats différents chaque fois que je dirige cette requête?


Pourquoi pas seulement Sélectionnez max (qry_doc_dates.arrival_date) ?


@Alex vient d'essayer cela. Il renvoie également le même résultat.


C'est impossible, jusqu'à ce que vous ayez des personnages invisibles quelque part dans les chaînes


Pa même résultat, je veux dire la valeur de date maximale de la liste des dates.


Mais j'ai besoin de "2019-05-22" pourquoi vous en avez besoin de 22? Ce qui ne nous donne pas un contexte sur ce que vous essayez de faire. BTW vous en avez également deux 22 sur ces données.


J'ai besoin de cette date car la requête VBA que j'essaie de convertir en requête MySQL possède la fonction dlast qui sélectionne la dernière ligne à partir des valeurs renvoyées. J'ai mentionné cette question dans la modification 1. J'ai la liste des dattes retournées, mais je suis coincé à essayer de comprendre ce que dlast veut (la dernière ligne autant que j'ai compris) et c'est pourquoi je J'essaie d'obtenir la dernière ligne retournée. Les deux mêmes dates que vous avez mentionnées sont la partie de la base de données héritée.


3 Réponses :


3
votes

Votre question ne fait pas trop de sens en fonction de la norme SQL. Dans l'absence d'une commande par la clause , le moteur de base de données est libre de renvoyer les lignes dans tout ordre . Cet ordre peut même changer avec le temps.

si essentiellement, vous demandez la "dernière ligne aléatoire" la requête renvoie . Si tel est le cas, pourquoi n'avez-vous pas la "première ligne aléatoire"? Cela ne fait aucune différence, n'est-ce pas?

Le seul moyen d'obtenir la dernière ligne aléatoire est de les faire tous et de les jeter tous sauf pour le dernier.

Maintenant, si vous avez juste besoin une ligne aléatoire , je vous suggérerais d'obtenir la première ligne aléatoire et du problème résolu.


1 commentaires

Vous avez raison. Je pense que j'ai mal compris ce que la requête VBA veut que je revienne. J'ai édité ma question. S'il vous plaît jeter un coup d'oeil à nouveau.



2
votes

En réponse aux informations supplémentaires de votre édition:

Edit 1: J'essaie de convertir cette requête VBA en MySQL. P>

DLast("arrival_date", "qry_doc_date", "[package_id] = " & Me!lstPackage)


1 commentaires

Je crois que cette fonction dlast est ajoutée au code car une entrée a été faite quelque part dans la table correspondante juste avant d'exécuter cette fonction. Cette date est extraite de la définir à une autre fonction. C'est ainsi que l'autre développeur a fait le code. J'ai confirmé que la dernière entrée de la date est requise et je comprends qu'il deviendra obsolète juste après avoir effectué une autre entrée dans ce tableau.



1
votes

Qu'est-ce dont vous avez besoin, c'est à qry_doc_date pour inclure un numéro de ligne séquentielle .

Ensuite, vous pouvez utiliser quelque chose comme ceci: xxx


3 commentaires

Je pense que votre réponse produira le résultat requis dont j'ai besoin. Je vais essayer cela dans une journée ou deux et mettez-le à jour ici comme la réponse. Merci


Ça a marché. Merci. Veuillez ulployer la question si vous estimez que cela était assez utile autant de personnes ne savaient pas à propos de cette fonction Row_Number () dans MySQL 8.0


Génial! Merci pour les commentaires.