dans un dB oracle, j'ai une table avec du contenu similaire à celui-ci: J'ai besoin d'une requête SQL qui retournerait la première occurrence de chaque changement de la date d'introduction du marché (marquée * À la fin) avec la date de changement et l'auteur. p> Donc, le résultat de la requête sera: p> merci d'avance < / p> p>
4 Réponses :
Quelque chose comme ça devrait fonctionner:
Je pense que les astérisques ont été ajoutés aux données de la question pour mettre en évidence ces lignes plutôt que d'être réellement dans la table. Pas tout à fait clair cependant ... mais s'ils sont là, le nombre ou les espaces varie.
J'ai utilisé l'astérisque pour marquer les entrées pour la sortie. Mais en plus de la solution est brillante ;-)
Vous pouvez utiliser l'agrégation, avec le En savoir plus . P> J'ai raté que l'une des dates est répétée, donc c'est un problème de lacunes et de îles. tabibitosan à la rescousse: p> garder ... Premier code> Extension:
select Market_Intro_Date,
min(Change_Date) as Change_Date,
min(Author) keep (dense_rank first order by Change_Date) as Author
from (
select Market_Intro_Date, Change_Date, Author,
row_number() over (partition by Market_Intro_Date order by Change_Date)
- row_number() over (order by Change_Date) as grp
from your_table
)
group by Market_Intro_Date, grp
order by Change_Date desc;
MARKET_INTRO_DATE | CHANGE_DATE | AUTHOR
:---------------- | :---------- | :-------
01-JUN-25 | 10-JUL-20 | Meyer
01-JAN-25 | 15-APR-20 | Peterson
01-DEC-24 | 15-JAN-20 | George
01-JAN-25 | 10-OCT-19 | Peterson
01-JUL-25 | 30-SEP-19 | Smith
01-JUL-24 | 01-MAY-19 | Smith
Vous pouvez utiliser n'existe pas code> comme suit:
mis à jour après la clarification forte> em> Match_Recognize fonctionne généralement plus vite que la vieille solution start_of_group basée sur les fonctions analytiques: p> CHANGE_DATE MARKET_INTRO_DATE AUTHOR
------------------- ------------------- --------
2019-05-01 00:00:00 2024-07-01 00:00:00 Smith
2019-09-30 00:00:00 2025-07-01 00:00:00 Smith
2019-10-10 00:00:00 2025-01-01 00:00:00 Peterson
2020-01-15 00:00:00 2024-12-01 00:00:00 George
2020-04-15 00:00:00 2025-01-01 00:00:00 Peterson
2020-07-10 00:00:00 2025-06-01 00:00:00 Meyer
Pourquoi avez-vous marqué 2 rangées avec "01.01.2025" et Peterson? On dirait que
01.01.2025 15.04.2020 Peterson code> devrait être
01.07.2025 30.09.2019 Smith Code>
On dirait que les deux rangées de Peterson devraient être là; Mais le 01.07.2025 / 30.09.2019 / Smith doit également être inclus (et être marqué d'un astérisque), ou était-ce que cette date est censée être 2024?
@Sayanmalakshinov: d'intérêt n'est pas lorsque chaque date d'introduction du marché a été définie, mais lorsque les modifications se sont produites.
@Alexpoole: C'était une erreur. Je l'ai corrigé. Merci pour le conseil!
Alors Peterson ne devrait donc pas apparaître deux fois, mais Smith devrait? C'est ce que la première requête de ma réponse fait; Mais pourquoi Peterson (seulement) contre 15.04.2025 plutôt que 10.10.2024 dans votre production; qui ne correspond pas aux astérisques maintenant incidemment. Je suis encore moins sûr de ce que vous voulez réellement.
@llasarov ok, je vois, on dirait que "début du groupe" standard, merci, j'ai mis à jour ma réponse avec match_recognize