SQL - Retour à la ligne distinct pour les données avec Max créé valeur d'horodatage
Dans mon programme, j'ai de la vérification des données entrantes, qui peuvent être de 4 types. Si les données répond à tous les critères requis, il est stocké avec succès dans une colonne de table, ainsi que le type de message et l'horodatage de quand la ligne a été entré dans la table.
De données peut également être écrit à la table avec l'erreur, en raison de quelque chose comme un problème de connexion occurrring etc avec l'audit. Le programme tentera de vérification de ces données, et en cas de succès va écrire une nouvelle ligne, avec succès. Donc, vous voyez, j'ai maintenant 2 lignes pour que le message de données, un succès, un avoir d'erreur, à la fois avec des temps différents timbres. (Le succès est d'avoir la plus récente d'horodatage de l'enregistrement d'erreur.)
Un troisième message, rejeté se produit et a un dossier écrit si les données entrantes ne pas répondre à la norme requise, à nouveau avec la création d'horodatage.
Ce que j'aimerais faire, c'est écrire une Sybase SQL de la requête pour remonter seulement l'enregistrement pour chaque message reçu, avec le plus d'horodatage.
Donc, avec l'erreur ci-dessus exemple, je ne veux pas retourner à l'enregistrement d'erreur, seul le succès correspondant enregistrement à partir de quand le processus de tentative d'appel et a été un succès.
J'avais pensé à quelque chose comme ce qui suit..
SELECT distinct(*)
FROM auditingTable
WHERE timestamp = (SELECT MAX(timestamp) from auditingTable)
si Im courant cela ne fera que ramener 1 record de la plus haute timestamp dans l'ensemble de la table.
Comment pourrais-je récupérer l'enregistrement le plus récent pour chaque message reçu, indépendamment de son statut??
Toutes les idées sont les bienvenues!
OriginalL'auteur deanmau5 | 2013-08-09
Vous devez vous connecter pour publier un commentaire.
Je tiens à noter qu'une simple modification de votre requête vous permet de faire ce que vous voulez (même si je préfère l'
row_number()
méthode dans Valex de réponse). C'est-à-tourner à la sous-requête dans lawhere
clause à une sous-requête en corrélation:C'est le standard SQL et devrait fonctionner dans n'importe quelle version de Sybase.
OriginalL'auteur Gordon Linoff
Vous n'avez pas mentionné votre Sybase version.
Vous pouvez utiliser Fonction ROW_NUMBER()
Par exemple votre table a
MessageId
,MessageTime
champs, vous pouvez utiliser la requête suivante:OriginalL'auteur valex
Je vous recommande l'ajout d'un auto-incrément champ de clé primaire de la
auditingTable
afin d'identifier plus facilement les enregistrements. Pour la requête ci-dessous, je vais supposer que vous avez ajouté cette colonne et l'a nomméauditRecordId
.En supposant que vous êtes d'identification de chaque message par le
messageType
alors la suivante devrait fonctionner:OriginalL'auteur weenoid