J'ai un tentable qui ressemble à ceci: et comment je voudrais que la table examine la fin est comme ceci: p> IE Le duplicata Comment puis-je retourner ou devrais-je choisir une seule ligne s'il y a plusieurs lignes en double et retournez toujours des lignes qui ne sont pas dupliqués? p> p> cf-0000001 code> doit être supprimé. p>
8 Réponses :
S'il s'agit d'une question SQL, et je comprends ce que vous demandez, (ce n'est pas tout à fait clair), ajoutez simplement des distincts à la requête
Select Distinct * From TempTable
Cela n'aidera pas Chebu, car les valeurs de HistoryStatus sont différentes.
select t.*
from (
select RequestID, max(CreatedDate) as MaxCreatedDate
from table1
group by RequestID
) tm
inner join table1 t on tm.RequestID = t.RequestID and tm.MaxCreatedDate = t.CreatedDate
Cette requête retournera à nouveau les "duplicats". Les valeurs de crééDate code> sont identiques lorsque requierd = 'cf-0000001' code>.
Bien que les données ne le montrent pas, j'étais en train de supposer que le temps serait différent, sinon il n'ya aucun moyen de savoir quel statut doit être retourné lorsqu'il y a des hausses de dupes sans le codage dur ... Vraiment pas un très bien libéré question.
Du titre, je suppose que vous n'avez besoin que d'un seul résultat par rangée unique? Si tel est le cas, jetez un coup d'œil à la groupe par clause (ou Sélectionner distinct ). p>
Si vous avez une relation unique dans votre requête, des lignes en double peuvent survenir d'un côté.
Supposons le suivant p> et vous exécutez une requête comme P> SELECT PLAYER_NAME FROM PLAYER WHERE TEAM_ID = <PUT_TEAM_ID_RIGHT_HERE>
Essayez ceci si vous souhaitez afficher l'une des lignes en double en fonction de demandesId et créaturesDate et d'afficher les derniers historistesStatus.
with t as (select row_number()over(partition by RequestID order by RequestID) as rnum,* from tbltmp) Select RequestID,CreatedDate,HistoryStatus from t a where rnum in (SELECT Max(rnum) FROM t GROUP BY RequestID,CreatedDate having t.RequestID=a.RequestID)
Eh bien, je vous ai bownté par accident lorsque vous essayez de copier-coller votre exemple de code. ... et le système ne me laissera pas renverser pour que je puisse changer de "upvote" et c'est votre bonne chance :-)
Pour récupérer un seul enregistrement distinct de la colonne en double de deux lignes, vous pouvez utiliser une colonne "Rowid" qui est conservée par Oracle lui-même comme clé primaire, alors essayez donc et puis vous pouvez Fetch Second Row Seulement par sa valeur de la colonne «Rowid» à l'aide d'une instruction SELECT. P> P>
Cela suppose Oracle et comment allez-vous "aller chercher la deuxième ligne par sa valeur de Rowid"? Si quelqu'un doit examiner le résultat fixé pour déterminer ce que c'est, ce n'est pas une "solution" très intéressante. S'il vous plaît Modifier Votre question si vous savez écrire une requête qui fait cela (sans un humain sélectionnant un railid).
select * from temptable
where rnum --unique key
in
(
SELECT RNUM --unique key
FROM temptable
WHERE ( HistoryStatus
) IN (SELECT HistoryStatus
FROM temptable
GROUP BY
HistoryStatus
HAVING COUNT(*) <= 1));
I have not tested this code. I have used similar code and it works.
The syntax is in Oracle.
Utilisation d'espaces de noms et de sous-candidats Vous pouvez le faire:
CF-0000001, 2009-08-26 13:07:01.000, Completed CF-0000114, 2009-08-26 13:07:01.000, Completed CF-0000115, 2009-08-26 13:07:01.000, Completed CF-0000112, 2009-08-26 13:07:01.000, For Review CF-0000113, 2009-08-26 13:07:01.000, For Review
Les deux tables sont identiques. Veuillez corriger la sortie attendue.
Quelle ligne doit être retournée si demandesId et crééDate sont identiques? Ou ce n'est-ce pas?
Ma solution suppose que les dates seront effectivement différentes, de sorte que vous puissiez simplement choisir une date maximale - sinon, besoin d'un moyen de classer les statuts pour savoir qui devrait gagner - le codage dur semble inélégant ...
Related: Equivalent Oracle de Postgres 'distincts sur?