-1
votes

Comment obtenir la date de la date de validité d'un prix de prix quotidiens individuels dans SQL

J'ai quelques prix pour le mois de janvier.

price,from,to
100,1,7
115,3,3
120,4,10 

sql

2 commentaires

J'ai supprimé les balises de base de données incohérentes de la question. Veuillez baliser uniquement avec la base de données que vous utilisez vraiment.


"J'ai besoin de faire cela en utilisant SQL uniquement" Eve4ry RDBMS utilise une dialecte différente de SQL, il n'y a pas de solution "SQL uniquement", car il pourrait bien être spécifique aux SJB que vous utilisez. Qu'avez-vous essayé jusqu'à présent, et pourquoi cela n'a-t-il pas fonctionné?


3 Réponses :


1
votes

Ceci est un problème de lacunes et de îles. La solution la plus simple est la différence de numéros de ligne: xxx

pourquoi cette fonction est un peu difficile à expliquer. Mais si vous regardez les résultats de la sous-requête, vous verrez comment les lignes adjacentes sont identifiées par la différence entre les deux valeurs.


1 commentaires

Merci Gordon. problème a été résolu. Compris la logique sur la façon dont cela a fonctionné.



0
votes
SELECT Lag.price,Lag.[date]  AS [From], MIN(Lead.[date]-Lag.[date])+Lag.[date] AS [to] 
 FROM 
    (
        SELECT [date],[Price] 
        FROM    
            (
                SELECT [date],[Price],LAG(Price) OVER (ORDER BY DATE,Price) AS LagID FROM #table1 A
            )B 
        WHERE CASE WHEN Price <> ISNULL(LagID,1) THEN 1 ELSE 0 END = 1
    )Lag
JOIN    
    (
        SELECT [date],[Price] 
        FROM
            (
                SELECT [date],Price,LEAD(Price) OVER (ORDER BY DATE,Price) AS LeadID FROM [#table1] A

            )B 
        WHERE CASE WHEN Price <> ISNULL(LeadID,1) THEN 1 ELSE 0 END = 1
    )Lead
ON          Lag.[Price]             =   Lead.[Price]
WHERE       Lead.[date]-Lag.[date] >=   0
GROUP BY    Lag.[date],Lag.[price]
ORDER BY    Lag.[date]

0 commentaires

0
votes

Une autre méthode utilisant des rangées non fondées précédentes xxx


0 commentaires