Create DB view where each row takes value(s) from previous one










0















I have a DB table like this (other columns are omitted)



date | change

2018/10/10 | +8
2018/10/31 | -5
2018/11/01 | +3
2018/11/03 | -2


I want to create a DB View from that table that display this



date | change | cumulative
2018/10/10 | +8 | 8
2018/10/31 | -5 | 3
2018/11/01 | +3 | 6
2018/11/03 | -2 | 4


the cumulative, which is the cumulative of previous entry (ordered by date) plus/minus change of current entry



Is there a cheap way (in terms of computation) that could create such view?










share|improve this question






















  • Which MySQL version?

    – jarlh
    Nov 15 '18 at 7:50











  • What is your MySQL version ? If it is 8.0.2 and above, you can look at window functions with Frames. Refer: dev.mysql.com/doc/refman/8.0/en/window-functions-frames.html

    – Madhur Bhaiya
    Nov 15 '18 at 7:50












  • initial value is 0

    – Anjar Wicaksono
    Nov 15 '18 at 7:50















0















I have a DB table like this (other columns are omitted)



date | change

2018/10/10 | +8
2018/10/31 | -5
2018/11/01 | +3
2018/11/03 | -2


I want to create a DB View from that table that display this



date | change | cumulative
2018/10/10 | +8 | 8
2018/10/31 | -5 | 3
2018/11/01 | +3 | 6
2018/11/03 | -2 | 4


the cumulative, which is the cumulative of previous entry (ordered by date) plus/minus change of current entry



Is there a cheap way (in terms of computation) that could create such view?










share|improve this question






















  • Which MySQL version?

    – jarlh
    Nov 15 '18 at 7:50











  • What is your MySQL version ? If it is 8.0.2 and above, you can look at window functions with Frames. Refer: dev.mysql.com/doc/refman/8.0/en/window-functions-frames.html

    – Madhur Bhaiya
    Nov 15 '18 at 7:50












  • initial value is 0

    – Anjar Wicaksono
    Nov 15 '18 at 7:50













0












0








0








I have a DB table like this (other columns are omitted)



date | change

2018/10/10 | +8
2018/10/31 | -5
2018/11/01 | +3
2018/11/03 | -2


I want to create a DB View from that table that display this



date | change | cumulative
2018/10/10 | +8 | 8
2018/10/31 | -5 | 3
2018/11/01 | +3 | 6
2018/11/03 | -2 | 4


the cumulative, which is the cumulative of previous entry (ordered by date) plus/minus change of current entry



Is there a cheap way (in terms of computation) that could create such view?










share|improve this question














I have a DB table like this (other columns are omitted)



date | change

2018/10/10 | +8
2018/10/31 | -5
2018/11/01 | +3
2018/11/03 | -2


I want to create a DB View from that table that display this



date | change | cumulative
2018/10/10 | +8 | 8
2018/10/31 | -5 | 3
2018/11/01 | +3 | 6
2018/11/03 | -2 | 4


the cumulative, which is the cumulative of previous entry (ordered by date) plus/minus change of current entry



Is there a cheap way (in terms of computation) that could create such view?







mysql sql






share|improve this question













share|improve this question











share|improve this question




share|improve this question










asked Nov 15 '18 at 7:49









Anjar WicaksonoAnjar Wicaksono

135




135












  • Which MySQL version?

    – jarlh
    Nov 15 '18 at 7:50











  • What is your MySQL version ? If it is 8.0.2 and above, you can look at window functions with Frames. Refer: dev.mysql.com/doc/refman/8.0/en/window-functions-frames.html

    – Madhur Bhaiya
    Nov 15 '18 at 7:50












  • initial value is 0

    – Anjar Wicaksono
    Nov 15 '18 at 7:50

















  • Which MySQL version?

    – jarlh
    Nov 15 '18 at 7:50











  • What is your MySQL version ? If it is 8.0.2 and above, you can look at window functions with Frames. Refer: dev.mysql.com/doc/refman/8.0/en/window-functions-frames.html

    – Madhur Bhaiya
    Nov 15 '18 at 7:50












  • initial value is 0

    – Anjar Wicaksono
    Nov 15 '18 at 7:50
















Which MySQL version?

– jarlh
Nov 15 '18 at 7:50





Which MySQL version?

– jarlh
Nov 15 '18 at 7:50













What is your MySQL version ? If it is 8.0.2 and above, you can look at window functions with Frames. Refer: dev.mysql.com/doc/refman/8.0/en/window-functions-frames.html

– Madhur Bhaiya
Nov 15 '18 at 7:50






What is your MySQL version ? If it is 8.0.2 and above, you can look at window functions with Frames. Refer: dev.mysql.com/doc/refman/8.0/en/window-functions-frames.html

– Madhur Bhaiya
Nov 15 '18 at 7:50














initial value is 0

– Anjar Wicaksono
Nov 15 '18 at 7:50





initial value is 0

– Anjar Wicaksono
Nov 15 '18 at 7:50












2 Answers
2






active

oldest

votes


















0














Try this query.



SELECT t1.Date, t1.Change, SUM(t2.Change) AS Cumalative
FROM YourTable t1
INNER JOIN YourTable t2 on t1.Date >= t2.Date
GROUP BY t1.Date, t1.Change
ORDER BY t1.Date





share|improve this answer

























  • This tag are mysql.. Your answer are sql server way to do

    – dwir182
    Nov 15 '18 at 7:57












  • I see both tags. Not sure which one he actually needs

    – Thilina Nakkawita
    Nov 15 '18 at 7:58











  • remove and using bactick ``.. So the query will valid.. and remove dbo..

    – dwir182
    Nov 15 '18 at 7:59












  • @ThilinaNakkawita, there's no <sql server> tag there...

    – jarlh
    Nov 15 '18 at 8:00











  • @dwir182 Thanks I updated the answer

    – Thilina Nakkawita
    Nov 15 '18 at 8:00


















0














In MySQL 8+, you can do:



select t.*,
sum(change) over (order by date) as cumulative
from t;


In earlier versions, I would recommend a correlated subquery:



select t.*,
(select sum(t2.change) from t t2 where t2.date <= t.date) as cumulative
from t;


This will work in a view and can take advantage of an index on (date, change).



This version is probably not as efficient as using variables in the older versions of MySQL, but it should be better than a join/group by solution.






share|improve this answer






















    Your Answer






    StackExchange.ifUsing("editor", function ()
    StackExchange.using("externalEditor", function ()
    StackExchange.using("snippets", function ()
    StackExchange.snippets.init();
    );
    );
    , "code-snippets");

    StackExchange.ready(function()
    var channelOptions =
    tags: "".split(" "),
    id: "1"
    ;
    initTagRenderer("".split(" "), "".split(" "), channelOptions);

    StackExchange.using("externalEditor", function()
    // Have to fire editor after snippets, if snippets enabled
    if (StackExchange.settings.snippets.snippetsEnabled)
    StackExchange.using("snippets", function()
    createEditor();
    );

    else
    createEditor();

    );

    function createEditor()
    StackExchange.prepareEditor(
    heartbeatType: 'answer',
    autoActivateHeartbeat: false,
    convertImagesToLinks: true,
    noModals: true,
    showLowRepImageUploadWarning: true,
    reputationToPostImages: 10,
    bindNavPrevention: true,
    postfix: "",
    imageUploader:
    brandingHtml: "Powered by u003ca class="icon-imgur-white" href="https://imgur.com/"u003eu003c/au003e",
    contentPolicyHtml: "User contributions licensed under u003ca href="https://creativecommons.org/licenses/by-sa/3.0/"u003ecc by-sa 3.0 with attribution requiredu003c/au003e u003ca href="https://stackoverflow.com/legal/content-policy"u003e(content policy)u003c/au003e",
    allowUrls: true
    ,
    onDemand: true,
    discardSelector: ".discard-answer"
    ,immediatelyShowMarkdownHelp:true
    );



    );













    draft saved

    draft discarded


















    StackExchange.ready(
    function ()
    StackExchange.openid.initPostLogin('.new-post-login', 'https%3a%2f%2fstackoverflow.com%2fquestions%2f53314629%2fcreate-db-view-where-each-row-takes-values-from-previous-one%23new-answer', 'question_page');

    );

    Post as a guest















    Required, but never shown

























    2 Answers
    2






    active

    oldest

    votes








    2 Answers
    2






    active

    oldest

    votes









    active

    oldest

    votes






    active

    oldest

    votes









    0














    Try this query.



    SELECT t1.Date, t1.Change, SUM(t2.Change) AS Cumalative
    FROM YourTable t1
    INNER JOIN YourTable t2 on t1.Date >= t2.Date
    GROUP BY t1.Date, t1.Change
    ORDER BY t1.Date





    share|improve this answer

























    • This tag are mysql.. Your answer are sql server way to do

      – dwir182
      Nov 15 '18 at 7:57












    • I see both tags. Not sure which one he actually needs

      – Thilina Nakkawita
      Nov 15 '18 at 7:58











    • remove and using bactick ``.. So the query will valid.. and remove dbo..

      – dwir182
      Nov 15 '18 at 7:59












    • @ThilinaNakkawita, there's no <sql server> tag there...

      – jarlh
      Nov 15 '18 at 8:00











    • @dwir182 Thanks I updated the answer

      – Thilina Nakkawita
      Nov 15 '18 at 8:00















    0














    Try this query.



    SELECT t1.Date, t1.Change, SUM(t2.Change) AS Cumalative
    FROM YourTable t1
    INNER JOIN YourTable t2 on t1.Date >= t2.Date
    GROUP BY t1.Date, t1.Change
    ORDER BY t1.Date





    share|improve this answer

























    • This tag are mysql.. Your answer are sql server way to do

      – dwir182
      Nov 15 '18 at 7:57












    • I see both tags. Not sure which one he actually needs

      – Thilina Nakkawita
      Nov 15 '18 at 7:58











    • remove and using bactick ``.. So the query will valid.. and remove dbo..

      – dwir182
      Nov 15 '18 at 7:59












    • @ThilinaNakkawita, there's no <sql server> tag there...

      – jarlh
      Nov 15 '18 at 8:00











    • @dwir182 Thanks I updated the answer

      – Thilina Nakkawita
      Nov 15 '18 at 8:00













    0












    0








    0







    Try this query.



    SELECT t1.Date, t1.Change, SUM(t2.Change) AS Cumalative
    FROM YourTable t1
    INNER JOIN YourTable t2 on t1.Date >= t2.Date
    GROUP BY t1.Date, t1.Change
    ORDER BY t1.Date





    share|improve this answer















    Try this query.



    SELECT t1.Date, t1.Change, SUM(t2.Change) AS Cumalative
    FROM YourTable t1
    INNER JOIN YourTable t2 on t1.Date >= t2.Date
    GROUP BY t1.Date, t1.Change
    ORDER BY t1.Date






    share|improve this answer














    share|improve this answer



    share|improve this answer








    edited Nov 15 '18 at 8:00

























    answered Nov 15 '18 at 7:56









    Thilina NakkawitaThilina Nakkawita

    9391228




    9391228












    • This tag are mysql.. Your answer are sql server way to do

      – dwir182
      Nov 15 '18 at 7:57












    • I see both tags. Not sure which one he actually needs

      – Thilina Nakkawita
      Nov 15 '18 at 7:58











    • remove and using bactick ``.. So the query will valid.. and remove dbo..

      – dwir182
      Nov 15 '18 at 7:59












    • @ThilinaNakkawita, there's no <sql server> tag there...

      – jarlh
      Nov 15 '18 at 8:00











    • @dwir182 Thanks I updated the answer

      – Thilina Nakkawita
      Nov 15 '18 at 8:00

















    • This tag are mysql.. Your answer are sql server way to do

      – dwir182
      Nov 15 '18 at 7:57












    • I see both tags. Not sure which one he actually needs

      – Thilina Nakkawita
      Nov 15 '18 at 7:58











    • remove and using bactick ``.. So the query will valid.. and remove dbo..

      – dwir182
      Nov 15 '18 at 7:59












    • @ThilinaNakkawita, there's no <sql server> tag there...

      – jarlh
      Nov 15 '18 at 8:00











    • @dwir182 Thanks I updated the answer

      – Thilina Nakkawita
      Nov 15 '18 at 8:00
















    This tag are mysql.. Your answer are sql server way to do

    – dwir182
    Nov 15 '18 at 7:57






    This tag are mysql.. Your answer are sql server way to do

    – dwir182
    Nov 15 '18 at 7:57














    I see both tags. Not sure which one he actually needs

    – Thilina Nakkawita
    Nov 15 '18 at 7:58





    I see both tags. Not sure which one he actually needs

    – Thilina Nakkawita
    Nov 15 '18 at 7:58













    remove and using bactick ``.. So the query will valid.. and remove dbo..

    – dwir182
    Nov 15 '18 at 7:59






    remove and using bactick ``.. So the query will valid.. and remove dbo..

    – dwir182
    Nov 15 '18 at 7:59














    @ThilinaNakkawita, there's no <sql server> tag there...

    – jarlh
    Nov 15 '18 at 8:00





    @ThilinaNakkawita, there's no <sql server> tag there...

    – jarlh
    Nov 15 '18 at 8:00













    @dwir182 Thanks I updated the answer

    – Thilina Nakkawita
    Nov 15 '18 at 8:00





    @dwir182 Thanks I updated the answer

    – Thilina Nakkawita
    Nov 15 '18 at 8:00













    0














    In MySQL 8+, you can do:



    select t.*,
    sum(change) over (order by date) as cumulative
    from t;


    In earlier versions, I would recommend a correlated subquery:



    select t.*,
    (select sum(t2.change) from t t2 where t2.date <= t.date) as cumulative
    from t;


    This will work in a view and can take advantage of an index on (date, change).



    This version is probably not as efficient as using variables in the older versions of MySQL, but it should be better than a join/group by solution.






    share|improve this answer



























      0














      In MySQL 8+, you can do:



      select t.*,
      sum(change) over (order by date) as cumulative
      from t;


      In earlier versions, I would recommend a correlated subquery:



      select t.*,
      (select sum(t2.change) from t t2 where t2.date <= t.date) as cumulative
      from t;


      This will work in a view and can take advantage of an index on (date, change).



      This version is probably not as efficient as using variables in the older versions of MySQL, but it should be better than a join/group by solution.






      share|improve this answer

























        0












        0








        0







        In MySQL 8+, you can do:



        select t.*,
        sum(change) over (order by date) as cumulative
        from t;


        In earlier versions, I would recommend a correlated subquery:



        select t.*,
        (select sum(t2.change) from t t2 where t2.date <= t.date) as cumulative
        from t;


        This will work in a view and can take advantage of an index on (date, change).



        This version is probably not as efficient as using variables in the older versions of MySQL, but it should be better than a join/group by solution.






        share|improve this answer













        In MySQL 8+, you can do:



        select t.*,
        sum(change) over (order by date) as cumulative
        from t;


        In earlier versions, I would recommend a correlated subquery:



        select t.*,
        (select sum(t2.change) from t t2 where t2.date <= t.date) as cumulative
        from t;


        This will work in a view and can take advantage of an index on (date, change).



        This version is probably not as efficient as using variables in the older versions of MySQL, but it should be better than a join/group by solution.







        share|improve this answer












        share|improve this answer



        share|improve this answer










        answered Nov 15 '18 at 12:33









        Gordon LinoffGordon Linoff

        778k35307410




        778k35307410



























            draft saved

            draft discarded
















































            Thanks for contributing an answer to Stack Overflow!


            • Please be sure to answer the question. Provide details and share your research!

            But avoid


            • Asking for help, clarification, or responding to other answers.

            • Making statements based on opinion; back them up with references or personal experience.

            To learn more, see our tips on writing great answers.




            draft saved


            draft discarded














            StackExchange.ready(
            function ()
            StackExchange.openid.initPostLogin('.new-post-login', 'https%3a%2f%2fstackoverflow.com%2fquestions%2f53314629%2fcreate-db-view-where-each-row-takes-values-from-previous-one%23new-answer', 'question_page');

            );

            Post as a guest















            Required, but never shown





















































            Required, but never shown














            Required, but never shown












            Required, but never shown







            Required, but never shown

































            Required, but never shown














            Required, but never shown












            Required, but never shown







            Required, but never shown







            Popular posts from this blog

            27

            Top Tejano songwriter Luis Silva dead of heart attack at 64

            Category:Rhetoric