IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Développement SQL Server Discussion :

Addition : mise a zero sous condition temporelle


Sujet :

Développement SQL Server

  1. #1
    Nouveau membre du Club
    Inscrit en
    Août 2009
    Messages
    29
    Détails du profil
    Informations forums :
    Inscription : Août 2009
    Messages : 29
    Points : 28
    Points
    28
    Par défaut Addition : mise a zero sous condition temporelle
    Bonjour,

    Je cree une Table ou j'aditionne des donees provenant d'une autre Table

    Dans ma table initiale, les donnees sont disponibles minute par minute.

    Dans la table cree, j'additionne les donnees initiales toutes les 2, 3, 4 minutes etc....

    Mais je ne sais pas comment coder un "reset" a chaque nouvelle journee.

    Ce sera plus clair avec un exemple
    DATE Volume Volume 2 min Volume 3 min
    1/1/2010 1307 NULL NULL
    1/1/2010 215 1522 NULL
    1/1/2010 654 869 2176
    1/1/2010 37 691 906
    1/1/2010 109 146 800
    1/1/2010 84 193 230
    1/1/2010 391 475 584
    1/1/2010 437 828 912
    1/1/2010 190 627 1018
    1/1/2010 156 346 783
    1/1/2010 68 224 414
    1/1/2010 124 192 348
    1/1/2010 142 266 334
    1/1/2010 95 237 361
    1/1/2010 81 176 318
    2/1/2010 56 NULL NULL
    2/1/2010 34 90 NULL
    2/1/2010 67 101 157
    2/1/2010 89 156 190



    Je ne sais pas comment modifier modifier mon code pour pour que mon calcul de somme se fasse sur chaque journee de facon independante.

    Voisci mon code:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    Use Pat1
    CREATE TABLE EuroStoxxBase1Volume
    (
    ContractType    char(50),
    TradeDateAvg    Smalldatetime,
    B1Vol1min       FLOAT,
    B1Vol2min       FLOAT,
    B1Vol3min       FLOAT,
    B1Vol4min       FLOAT
     
    );
     
    ;WITH MA AS
    (
    SELECT ma.EurostoxxBase1ContractType, ma.EurostoxxBase1TradeDate, ma.EurostoxxBase1Volume, ROW_NUMBER() OVER(ORDER BY EurostoxxBase1TradeDate) AS [ORDER] FROM EurostoxxBase1 ma
    )
    INSERT INTO EurostoxxBase1Volume (ContractType, TradeDateAvg , B1Vol1min, B1Vol2min, B1Vol3min, B1Vol4min)
    SELECT
    ma.EurostoxxBase1ContractType AS ContractType,
    ma.EurostoxxBase1TradeDate AS TradeDateAvg,
    ma.EurostoxxBase1Volume AS B1Vol1min,
    ((ma.EurostoxxBase1Volume + ma2.EurostoxxBase1Volume) ) AS B1Vol2min,
    ((ma.EurostoxxBase1Volume + ma2.EurostoxxBase1Volume + ma3.EurostoxxBase1Volume) ) AS B1Vol3min,
    ((ma.EurostoxxBase1Volume + ma2.EurostoxxBase1Volume + ma3.EurostoxxBase1Volume + ma4.EurostoxxBase1Volume) / 4) AS B1Vol4min
     
    FROM MA ma LEFT OUTER JOIN MA ma2 ON ma.[ORDER] = ma2.[ORDER] + 1
    LEFT OUTER JOIN MA ma3 ON ma2.[ORDER] = ma3.[ORDER] + 1
    LEFT OUTER JOIN MA ma4 ON ma3.[ORDER] = ma4.[ORDER] + 1

  2. #2
    Modérateur

    Homme Profil pro
    Administrateur de base de données
    Inscrit en
    Janvier 2005
    Messages
    5 826
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Administrateur de base de données
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Janvier 2005
    Messages : 5 826
    Points : 12 371
    Points
    12 371
    Par défaut
    Bonjour,

    Je ne parviens pas à comprendre exactement ce que vous voulez faire.
    Quelle est la table source ? Quelle est sa structure ?
    Vous pouvez très probablement vous en sortir avec une vue, et peut-être en utilisant une table de dates ...

    @++

  3. #3
    Rédacteur

    Avatar de SQLpro
    Homme Profil pro
    Expert bases de données / SQL / MS SQL Server / Postgresql
    Inscrit en
    Mai 2002
    Messages
    21 774
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Var (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Expert bases de données / SQL / MS SQL Server / Postgresql
    Secteur : Conseil

    Informations forums :
    Inscription : Mai 2002
    Messages : 21 774
    Points : 52 746
    Points
    52 746
    Billets dans le blog
    5
    Par défaut
    Faites un SUM(???) OVER(PARTITION BY Date)

    Lisez l'article que j'ai écrit à ce sujet (somme cumulatives) : http://sqlpro.developpez.com/article...clause-window/

    A +
    Frédéric Brouard - SQLpro - ARCHITECTE DE DONNÉES - expert SGBDR et langage SQL
    Le site sur les SGBD relationnels et le langage SQL: http://sqlpro.developpez.com/
    Blog SQL, SQL Server, SGBDR : http://blog.developpez.com/sqlpro
    Expert Microsoft SQL Server - M.V.P. (Most valuable Professional) MS Corp.
    Entreprise SQL SPOT : modélisation, conseils, audit, optimisation, formation...
    * * * * * Expertise SQL Server : http://mssqlserver.fr/ * * * * *

  4. #4
    Nouveau membre du Club
    Inscrit en
    Août 2009
    Messages
    29
    Détails du profil
    Informations forums :
    Inscription : Août 2009
    Messages : 29
    Points : 28
    Points
    28
    Par défaut
    Bonjour,

    L'article est super riche,
    j'essais de comprendre!

    Merci

  5. #5
    Nouveau membre du Club
    Inscrit en
    Août 2009
    Messages
    29
    Détails du profil
    Informations forums :
    Inscription : Août 2009
    Messages : 29
    Points : 28
    Points
    28
    Par défaut
    Bonsoir,

    Cet article est vraiment bien.
    Je ne suis pas encore arrive au bout, y a pas mal de trucs a avaler!

    J'ai encore une question et oui c'est le debut je n'ai que des questions.

    Soit une table avec un champs Date&Heure
    - Il faudrait qu'en fonction d'un evenement particulier dans la table a une Date&Heure specifique
    - Je puisse rapatrier des evenements intervenus a d'autres Date&Heure

    L'idee est d'etre capable de monter une requete qui se rapprocherait d'une formulation de type If Then:

    Voici un exemple de ce que je dois creer pour etre pour etre plus clair:

    L'idee : Definir ce qui se passe quand: EuroSoxxBase1Closing1min2min change
    J'ai besoin d'afficher plusieurs data : Open / Max / Min / Close
    et de calxuler 1 resultat

    Exemple

    A : 19/12/2008 7:07 le signe de EuroSoxxBase1Closing1min2min change (de positif il passe a negatif)

    A : 19/12/2008 7:011 le signe de EuroSoxxBase1Closing1min2min change (De negatif a positif)

    J'ai besoin d'afficher : Open / Max / Min / Close

    Open = 1 minute apres le changement de signe de EuroSoxxBase1Closing1min2min = 2447, (TradeDate is 19/12/2008 7:09)

    Close = 1 minute apres le changement de signe de EuroSoxxBase1Closing1min2min = 2450 ( TradeDate is 19/12/2008 7:12)

    Max = Max of EuroStoxxBase1Maximum = Max 0f (2431 - 2434 - 2437) = 2437 (TradeDate range = 19/12/2008 7:09 jusqu'a 19/12/2008 7:11)

    Min = Min of EuroStoxxBase1Minimum = Min 0f (2421 - 2416- 2411) = 2411 (TradeDate range = 19/12/2008 7:09 jusqu'a 19/12/2008 7:11)

    Open - Close = (2450 - 2448) = 2


    Exemple
    A : 19/12/2008 7:011 le signe de EuroSoxxBase1Closing1min2min change (de positif, a negatif)

    A : 19/12/2008 7:16 le signe de EuroSoxxBase1Closing1min2min change (de negatif, a positif)

    (19/12/2008 7:15 le signe ne change pas EuroSoxxBase1Closing1min2min = 0)


    J'ai besoin d'afficher : Open / Max / Min / Close

    Open = 1 minute apres le changement de signe de EuroSoxxBase1Closing1min2min = 2450, (TradeDate is 19/12/2008 7:12)

    Close = 1 minute apres le changement de signe de EuroSoxxBase1Closing1min2min = 2455 ( TradeDate is 19/12/2008 7:17)

    Max = Max of EuroStoxxBase1Maximum = Max 0f (2440 - 2443 - 2446 -2449 - 2452) = 2437 (TradeDate range = 19/12/2008 7:12 jusqu'a 19/12/2008 7:16)

    Min = Min of EuroStoxxBase1Minimum = Min 0f (2404 - 2397- 2390 - 2383 - 2376) = 2376 (TradeDate range = 19/12/2008 7:12 jusqu'a 19/12/2008 7:16)

    Open - Close = (2450 - 2455) = -5

    Une idee pour me dire par quoi commencer?

  6. #6
    Nouveau membre du Club
    Inscrit en
    Août 2009
    Messages
    29
    Détails du profil
    Informations forums :
    Inscription : Août 2009
    Messages : 29
    Points : 28
    Points
    28
    Par défaut J'avais oublie la Table
    EuroStoxxBase1Opening EuroStoxxBase1Maximum EuroStoxxBase1Minimum EuroStoxxBase1Closing EuroStoxxBase1ClosingDifferenceTradeDate EuroSoxxBase1Closing1min2min
    2438 2438 2426 2450 19/12/2008 7:00 NULL
    2439 2427 2425 2452 19/12/2008 7:01 0
    2440 2430 2425 2454 19/12/2008 7:02 0
    2441 2427 2424 2456 19/12/2008 7:03 -0.5
    2442 2428 2424 2458 19/12/2008 7:04 0
    2443 2429 2425 2460 19/12/2008 7:05 1.5
    2444 2431 2426 2462 19/12/2008 7:06 0
    2445 2429 2425 2464 19/12/2008 7:07 -1
    2446 2428 2426 2466 19/12/2008 7:08 1
    2447 2431 2421 2468 19/12/2008 7:09 1
    2448 2434 2416 2470 19/12/2008 7:10 0
    2449 2437 2411 2472 19/12/2008 7:11 -1
    2450 2440 2404 2474 19/12/2008 7:12 -3
    2451 2443 2397 2476 19/12/2008 7:13 -4
    2452 2446 2390 2478 19/12/2008 7:14 -2
    2453 2449 2383 2480 20/12/2008 7:15 0
    2454 2452 2376 2482 21/12/2008 7:16 1
    2455 2455 2369 2484 22/12/2008 7:17 5

  7. #7
    Rédacteur

    Avatar de SQLpro
    Homme Profil pro
    Expert bases de données / SQL / MS SQL Server / Postgresql
    Inscrit en
    Mai 2002
    Messages
    21 774
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Var (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Expert bases de données / SQL / MS SQL Server / Postgresql
    Secteur : Conseil

    Informations forums :
    Inscription : Mai 2002
    Messages : 21 774
    Points : 52 746
    Points
    52 746
    Billets dans le blog
    5
    Par défaut
    Donnez nous la table sous forme CREATE et les données sous forme INSERT, là c'est inutilisable !

    A +
    Frédéric Brouard - SQLpro - ARCHITECTE DE DONNÉES - expert SGBDR et langage SQL
    Le site sur les SGBD relationnels et le langage SQL: http://sqlpro.developpez.com/
    Blog SQL, SQL Server, SGBDR : http://blog.developpez.com/sqlpro
    Expert Microsoft SQL Server - M.V.P. (Most valuable Professional) MS Corp.
    Entreprise SQL SPOT : modélisation, conseils, audit, optimisation, formation...
    * * * * * Expertise SQL Server : http://mssqlserver.fr/ * * * * *

  8. #8
    Nouveau membre du Club
    Inscrit en
    Août 2009
    Messages
    29
    Détails du profil
    Informations forums :
    Inscription : Août 2009
    Messages : 29
    Points : 28
    Points
    28
    Par défaut
    Bonjour,

    C'est ce que j'aurais du faire effectivement
    Merci en tous les cas de vous pencher sur mon probleme


    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    CREATE TABLE T
    (
    EuroStoxxBase1Opening                                float, 
    EuroStoxxBase1Maximum                                float,
    EuroStoxxBase1Minimum                                float,
    EuroStoxxBase1ClosingDifference                      float,
    EuroStoxxBase1ClosingDifferenceTradeDate             smalldatetime,
    EuroSoxxBase1Closing1min2min                         float
    );
     
     
     
    INSERT INTO T VALUES (2438, 2438, 2426, 2450, '19/12/2008 7:00', NULL);
    INSERT INTO T VALUES (2439, 2427, 2425, 2452, '19/12/2008 7:01', 0);
    INSERT INTO T VALUES (2440, 2430, 2425, 2454, '19/12/2008 7:02', 0);
    INSERT INTO T VALUES (2441, 2427, 2424, 2456, '19/12/2008 7:03', -0.5);
    INSERT INTO T VALUES (2442, 2428, 2424, 2458, '19/12/2008 7:04', 0);
    INSERT INTO T VALUES (2443, 2429, 2425, 2460, '19/12/2008 7:05', 1.5);
    INSERT INTO T VALUES (2444, 2431, 2426, 2462, '19/12/2008 7:06', 0);
    INSERT INTO T VALUES (2445, 2429, 2425, 2464, '19/12/2008 7:07', -1);
    INSERT INTO T VALUES (2446, 2428, 2426, 2466, '19/12/2008 7:08', 1);
    INSERT INTO T VALUES (2447, 2431, 2421, 2468, '19/12/2008 7:09', 1);
    INSERT INTO T VALUES (2448, 2434, 2416, 2470, '19/12/2008 7:10', 0);
    INSERT INTO T VALUES (2449, 2437, 2411, 2472, '19/12/2008 7:11', -1);
    INSERT INTO T VALUES (2450, 2440, 2404, 2474, '19/12/2008 7:12', -3);
    INSERT INTO T VALUES (2451, 2443, 2397, 2476, '19/12/2008 7:13', -4);
    INSERT INTO T VALUES (2452, 2446, 2390, 2478, '19/12/2008 7:14', -2);
    INSERT INTO T VALUES (2453, 2449, 2383, 2480, '20/12/2008 7:15', 0);
    INSERT INTO T VALUES (2454, 2452, 2376, 2482, '21/12/2008 7:16', 1);
    INSERT INTO T VALUES (2455, 2455, 2369, 2484, '22/12/2008 7:17', 5);

  9. #9
    Nouveau membre du Club
    Inscrit en
    Août 2009
    Messages
    29
    Détails du profil
    Informations forums :
    Inscription : Août 2009
    Messages : 29
    Points : 28
    Points
    28
    Par défaut
    Bonsoir,

    J'ai essaye d'adapter un code qui fonctionne:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    DECLARE @t TABLE
    (
     DateTrade       smalldatetime,
     EurostoxxBase1Opening float,
     EurostoxxBase1Maximum float,
     EurostoxxBase1Minimum float,
     EurostoxxBase1Closing float,
     EurostoxxBase1Volume float
    );
     
    INSERT INTO @t VALUES ('01/01/2010 09:00:00', 1, 2, 34, 10, 50);
    INSERT INTO @t VALUES ('01/01/2010 09:01:00', 2, 10, 45, 11, 60);
    INSERT INTO @t VALUES ('01/01/2010 09:02:00', 3, 8, 21, 12, 70);
    INSERT INTO @t VALUES ('01/01/2010 09:03:00', 4, 28, 32, 13, 80);
    INSERT INTO @t VALUES ('01/01/2010 09:04:00', 5, 36, 31, 14, 90);
    INSERT INTO @t VALUES ('01/01/2010 09:05:00', 6, 56, 7, 15, 100);
    INSERT INTO @t VALUES ('01/01/2010 09:06:00', 7, 14, 1, 16, 110);
     
    WITH CTE
    AS
    (
     SELECT 
      ROW_NUMBER() OVER(ORDER BY DateTrade) AS num,
      *
     FROM @t
    )
    SELECT 
     T2.DateTrade,
     CASE T2.num % 2 WHEN 0 THEN CASE 
         WHEN T.EurostoxxBase1Maximum > T2.EurostoxxBase1Maximum THEN T.EurostoxxBase1Maximum
         WHEN T.EurostoxxBase1Maximum < T2.EurostoxxBase1Maximum THEN T2.EurostoxxBase1Maximum
         ELSE T.EurostoxxBase1Maximum
         END
       ELSE NULL
     END AS MaxB2,
     CASE T2.num % 2 WHEN 0 THEN CASE 
         WHEN T.EurostoxxBase1Minimum > T2.EurostoxxBase1Minimum THEN T2.EurostoxxBase1Minimum
         WHEN T.EurostoxxBase1Minimum < T2.EurostoxxBase1Minimum THEN T.EurostoxxBase1Minimum
         ELSE T.EurostoxxBase1Minimum
         END
       ELSE NULL
     END AS MinB2,
     CASE T2.num % 2 WHEN 0 THEN T.EurostoxxBase1Opening END AS EurostoxxBase1Opening,
     CASE T2.num % 2 WHEN 0 THEN T2.EurostoxxBase1Closing END AS EurostoxxBase1Closing,
     CASE T2.num % 2 WHEN 0 THEN T.EurostoxxBase1Volume + T2.EurostoxxBase1Volume END AS EurostoxxBase1Volume
    FROM CTE AS T 
    INNER JOIN CTE AS T2
    ON T.num = T2.num - 1
    WHERE T2.num % 2 = 0;
    Ce code fontionne,

    J'essaie de l'adapter pour le faire tourner sur une table existante EurostoxxBase1 pour creer EurostoxxBase2 mais la ca ne marche pas, le code tourne, mais il ne donne pas les resultats attendu.

    Ci dessous le code adapte:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
     
    CREATE TABLE EurostoxxBase2
    (
     EurostoxxBase2TradeDate       smalldatetime,
     EurostoxxBase2Opening         float,
     EurostoxxBase2Maximum         float,
     EurostoxxBase2Minimum         float,
     EurostoxxBase2Closing         float,
     EurostoxxBase2Volume          float
    );
     
     
    WITH CTE
    AS
    (
     SELECT cte.EurostoxxBase1ContractType, cte.EurostoxxBase1TradeDate, cte.EurostoxxBase1Opening, cte.EurostoxxBase1Maximum,
      cte.EurostoxxBase1Minimum, cte.EurostoxxBase1Closing, cte.EurostoxxBase1Volume, 
      ROW_NUMBER() OVER(ORDER BY EurostoxxBase1TradeDate) AS num
     FROM EurostoxxBase1 cte
    )
     
    INSERT INTO EurostoxxBase2
    (
     EurostoxxBase2TradeDate,
     EurostoxxBase2Opening,
     EurostoxxBase2Maximum,
     EurostoxxBase2Minimum,
     EurostoxxBase2Closing,
     EurostoxxBase2Volume 
    )
     
    SELECT 
     T2.EurostoxxBase1TradeDate,
     CASE T2.num % 2 WHEN 0 THEN CASE 
         WHEN T.EurostoxxBase1Maximum > T2.EurostoxxBase1Maximum THEN T.EurostoxxBase1Maximum
         WHEN T.EurostoxxBase1Maximum < T2.EurostoxxBase1Maximum THEN T2.EurostoxxBase1Maximum
         ELSE T.EurostoxxBase1Maximum
         END
       ELSE NULL
     END AS MaxB2,
     CASE T2.num % 2 WHEN 0 THEN CASE 
         WHEN T.EurostoxxBase1Minimum > T2.EurostoxxBase1Minimum THEN T2.EurostoxxBase1Minimum
         WHEN T.EurostoxxBase1Minimum < T2.EurostoxxBase1Minimum THEN T.EurostoxxBase1Minimum
         ELSE T.EurostoxxBase1Minimum
         END
       ELSE NULL
     END AS MinB2,
     CASE T2.num % 2 WHEN 0 THEN T.EurostoxxBase1Opening END AS EurostoxxBase1Opening,
     CASE T2.num % 2 WHEN 0 THEN T2.EurostoxxBase1Closing END AS EurostoxxBase1Closing,
     CASE T2.num % 2 WHEN 0 THEN T.EurostoxxBase1Volume + T2.EurostoxxBase1Volume END AS EurostoxxBase1Volume
    FROM CTE AS T 
    INNER JOIN CTE AS T2
    ON T.num = T2.num - 1
    WHERE T2.num % 2 = 0;
    Je m'emmele les pincaux mais je ne sais pas ou!

    Si jamais quelqu'un avit le temps de jeter un oeil ce serait synpa

  10. #10
    Nouveau membre du Club
    Inscrit en
    Août 2009
    Messages
    29
    Détails du profil
    Informations forums :
    Inscription : Août 2009
    Messages : 29
    Points : 28
    Points
    28
    Par défaut
    Voici le code qui fonctionne si jamais ca interesse quelqu'un


    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    CREATE TABLE EurostoxxBase2
    (
     EurostoxxBase2TradeDate       smalldatetime,
     EurostoxxBase2Opening         float,
     EurostoxxBase2Maximum         float,
     EurostoxxBase2Minimum         float,
     EurostoxxBase2Closing         float,
     EurostoxxBase2Volume          float
    );
     
     
    WITH CTE
    AS
    (
     SELECT cte.EurostoxxBase1ContractType, cte.EurostoxxBase1TradeDate, 
     cte.EurostoxxBase1Opening, cte.EurostoxxBase1Maximum,
     cte.EurostoxxBase1Minimum, cte.EurostoxxBase1Closing, cte.EurostoxxBase1Volume, 
     ROW_NUMBER() OVER(ORDER BY EurostoxxBase1TradeDate) AS num
     FROM EurostoxxBase1 cte
    )
     
    INSERT INTO EurostoxxBase2
    (
     EurostoxxBase2TradeDate,
     EurostoxxBase2Opening,
     EurostoxxBase2Maximum,
     EurostoxxBase2Minimum,
     EurostoxxBase2Closing,
     EurostoxxBase2Volume 
    )
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    SELECT 
    T2.EurostoxxBase1TradeDate,
     CASE T2.num % 2 WHEN 0 THEN T.EurostoxxBase1Opening END AS EurostoxxBase1Opening,
     CASE T2.num % 2 WHEN 0 THEN CASE
       WHEN T.EurostoxxBase1Maximum > T2.EurostoxxBase1Maximum THEN T.EurostoxxBase1Maximum
     
       WHEN T.EurostoxxBase1Maximum < T2.EurostoxxBase1Maximum THEN T2.EurostoxxBase1Maximum
     
       ELSE T.EurostoxxBase1Maximum
       END
       ELSE NULL
     END AS MaxB2,
     
     CASE T2.num % 2 WHEN 0 THEN CASE
       WHEN T.EurostoxxBase1Minimum > T2.EurostoxxBase1Minimum THEN T2.EurostoxxBase1Minimum
     
       WHEN T.EurostoxxBase1Minimum < T2.EurostoxxBase1Minimum THEN T.EurostoxxBase1Minimum ELSE T.EurostoxxBase1Minimum
       END
       ELSE NULL
     END AS MinB2,
     
     CASE T2.num % 2 WHEN 0 THEN T2.EurostoxxBase1Closing END AS EurostoxxBase1Closing,
     
     CASE T2.num % 2 WHEN 0 THEN T.EurostoxxBase1Volume + T2.EurostoxxBase1Volume END AS EurostoxxBase1Volume
     
    FROM CTE AS T
    INNER JOIN CTE AS T2
    ON T.num = T2.num - 1
    WHERE T2.num % 2 = 0;

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Réponses: 13
    Dernier message: 15/06/2015, 12h27
  2. Mise à jour sous condition
    Par floh400 dans le forum Requêtes
    Réponses: 0
    Dernier message: 06/07/2014, 02h30
  3. Mise à jour de champ sous condition
    Par aiss57 dans le forum Langage SQL
    Réponses: 2
    Dernier message: 02/07/2009, 21h57
  4. Mise à jour de champ sous conditions
    Par aiss57 dans le forum Langage SQL
    Réponses: 2
    Dernier message: 19/06/2009, 15h05
  5. Mise à jour d'une table sous conditions
    Par Jean-Luc80 dans le forum VBA Access
    Réponses: 1
    Dernier message: 13/11/2007, 10h56

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo