Query to get items based on difference of min,max in group_concat









up vote
0
down vote

favorite












Let's say I have the following entries:



 ID Title Year
1 Avatar 2009
2 Avatar 2020
3 Hello 2014
4 Hello 2013
5 New 2017


Here is how I would get each title with all its years:



SELECT title, GROUP_CONCAT(DISTINCT Year) FROM table


And it would give me:



Title Years
Avatar 2009,2020
Hello 2013,2014
New 2017


How would I do a query to get all results where the min(Year) is more than 5 years away from the max(Year). The correct result would then be:



Title Years > 5 Year Diff
Avatar 2009,2020 YES
Hello 2013,2014 NO
New 2017 NO









share|improve this question

























    up vote
    0
    down vote

    favorite












    Let's say I have the following entries:



     ID Title Year
    1 Avatar 2009
    2 Avatar 2020
    3 Hello 2014
    4 Hello 2013
    5 New 2017


    Here is how I would get each title with all its years:



    SELECT title, GROUP_CONCAT(DISTINCT Year) FROM table


    And it would give me:



    Title Years
    Avatar 2009,2020
    Hello 2013,2014
    New 2017


    How would I do a query to get all results where the min(Year) is more than 5 years away from the max(Year). The correct result would then be:



    Title Years > 5 Year Diff
    Avatar 2009,2020 YES
    Hello 2013,2014 NO
    New 2017 NO









    share|improve this question























      up vote
      0
      down vote

      favorite









      up vote
      0
      down vote

      favorite











      Let's say I have the following entries:



       ID Title Year
      1 Avatar 2009
      2 Avatar 2020
      3 Hello 2014
      4 Hello 2013
      5 New 2017


      Here is how I would get each title with all its years:



      SELECT title, GROUP_CONCAT(DISTINCT Year) FROM table


      And it would give me:



      Title Years
      Avatar 2009,2020
      Hello 2013,2014
      New 2017


      How would I do a query to get all results where the min(Year) is more than 5 years away from the max(Year). The correct result would then be:



      Title Years > 5 Year Diff
      Avatar 2009,2020 YES
      Hello 2013,2014 NO
      New 2017 NO









      share|improve this question













      Let's say I have the following entries:



       ID Title Year
      1 Avatar 2009
      2 Avatar 2020
      3 Hello 2014
      4 Hello 2013
      5 New 2017


      Here is how I would get each title with all its years:



      SELECT title, GROUP_CONCAT(DISTINCT Year) FROM table


      And it would give me:



      Title Years
      Avatar 2009,2020
      Hello 2013,2014
      New 2017


      How would I do a query to get all results where the min(Year) is more than 5 years away from the max(Year). The correct result would then be:



      Title Years > 5 Year Diff
      Avatar 2009,2020 YES
      Hello 2013,2014 NO
      New 2017 NO






      mysql sql






      share|improve this question













      share|improve this question











      share|improve this question




      share|improve this question










      asked Nov 8 at 22:13









      David542

      32.2k89245446




      32.2k89245446






















          1 Answer
          1






          active

          oldest

          votes

















          up vote
          1
          down vote



          accepted










          Your first query is wrong. It should be:



          SELECT title, GROUP_CONCAT(DISTINCT Year)
          FROM table
          GROUP BY title;


          To implement what you want is simply a CASE expression:



          SELECT title, GROUP_CONCAT(DISTINCT Year),
          (CASE WHEN MAX(YEAR) - MIN(YEAR) > 5 THEN 'YES' ELSE 'NO' END) as flag
          FROM table
          GROUP BY title;


          Quite often, such a flag would be encoded as "1" for true and "0" for false. In this case, you would just use the boolean expression for the flag:



          SELECT title, GROUP_CONCAT(DISTINCT Year),
          (MAX(YEAR) - MIN(YEAR) > 5) as flag
          FROM table
          GROUP BY title;


          Note that this usage is a MySQL extension (but it happens to be one that I like).






          share|improve this answer




















          • Thanks -- the second approach is very elegant and easy to read as well. Thanks for pointing out the error/typo in my query as well.
            – David542
            Nov 8 at 22:25










          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',
          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%2f53216959%2fquery-to-get-items-based-on-difference-of-min-max-in-group-concat%23new-answer', 'question_page');

          );

          Post as a guest















          Required, but never shown

























          1 Answer
          1






          active

          oldest

          votes








          1 Answer
          1






          active

          oldest

          votes









          active

          oldest

          votes






          active

          oldest

          votes








          up vote
          1
          down vote



          accepted










          Your first query is wrong. It should be:



          SELECT title, GROUP_CONCAT(DISTINCT Year)
          FROM table
          GROUP BY title;


          To implement what you want is simply a CASE expression:



          SELECT title, GROUP_CONCAT(DISTINCT Year),
          (CASE WHEN MAX(YEAR) - MIN(YEAR) > 5 THEN 'YES' ELSE 'NO' END) as flag
          FROM table
          GROUP BY title;


          Quite often, such a flag would be encoded as "1" for true and "0" for false. In this case, you would just use the boolean expression for the flag:



          SELECT title, GROUP_CONCAT(DISTINCT Year),
          (MAX(YEAR) - MIN(YEAR) > 5) as flag
          FROM table
          GROUP BY title;


          Note that this usage is a MySQL extension (but it happens to be one that I like).






          share|improve this answer




















          • Thanks -- the second approach is very elegant and easy to read as well. Thanks for pointing out the error/typo in my query as well.
            – David542
            Nov 8 at 22:25














          up vote
          1
          down vote



          accepted










          Your first query is wrong. It should be:



          SELECT title, GROUP_CONCAT(DISTINCT Year)
          FROM table
          GROUP BY title;


          To implement what you want is simply a CASE expression:



          SELECT title, GROUP_CONCAT(DISTINCT Year),
          (CASE WHEN MAX(YEAR) - MIN(YEAR) > 5 THEN 'YES' ELSE 'NO' END) as flag
          FROM table
          GROUP BY title;


          Quite often, such a flag would be encoded as "1" for true and "0" for false. In this case, you would just use the boolean expression for the flag:



          SELECT title, GROUP_CONCAT(DISTINCT Year),
          (MAX(YEAR) - MIN(YEAR) > 5) as flag
          FROM table
          GROUP BY title;


          Note that this usage is a MySQL extension (but it happens to be one that I like).






          share|improve this answer




















          • Thanks -- the second approach is very elegant and easy to read as well. Thanks for pointing out the error/typo in my query as well.
            – David542
            Nov 8 at 22:25












          up vote
          1
          down vote



          accepted







          up vote
          1
          down vote



          accepted






          Your first query is wrong. It should be:



          SELECT title, GROUP_CONCAT(DISTINCT Year)
          FROM table
          GROUP BY title;


          To implement what you want is simply a CASE expression:



          SELECT title, GROUP_CONCAT(DISTINCT Year),
          (CASE WHEN MAX(YEAR) - MIN(YEAR) > 5 THEN 'YES' ELSE 'NO' END) as flag
          FROM table
          GROUP BY title;


          Quite often, such a flag would be encoded as "1" for true and "0" for false. In this case, you would just use the boolean expression for the flag:



          SELECT title, GROUP_CONCAT(DISTINCT Year),
          (MAX(YEAR) - MIN(YEAR) > 5) as flag
          FROM table
          GROUP BY title;


          Note that this usage is a MySQL extension (but it happens to be one that I like).






          share|improve this answer












          Your first query is wrong. It should be:



          SELECT title, GROUP_CONCAT(DISTINCT Year)
          FROM table
          GROUP BY title;


          To implement what you want is simply a CASE expression:



          SELECT title, GROUP_CONCAT(DISTINCT Year),
          (CASE WHEN MAX(YEAR) - MIN(YEAR) > 5 THEN 'YES' ELSE 'NO' END) as flag
          FROM table
          GROUP BY title;


          Quite often, such a flag would be encoded as "1" for true and "0" for false. In this case, you would just use the boolean expression for the flag:



          SELECT title, GROUP_CONCAT(DISTINCT Year),
          (MAX(YEAR) - MIN(YEAR) > 5) as flag
          FROM table
          GROUP BY title;


          Note that this usage is a MySQL extension (but it happens to be one that I like).







          share|improve this answer












          share|improve this answer



          share|improve this answer










          answered Nov 8 at 22:15









          Gordon Linoff

          745k32285390




          745k32285390











          • Thanks -- the second approach is very elegant and easy to read as well. Thanks for pointing out the error/typo in my query as well.
            – David542
            Nov 8 at 22:25
















          • Thanks -- the second approach is very elegant and easy to read as well. Thanks for pointing out the error/typo in my query as well.
            – David542
            Nov 8 at 22:25















          Thanks -- the second approach is very elegant and easy to read as well. Thanks for pointing out the error/typo in my query as well.
          – David542
          Nov 8 at 22:25




          Thanks -- the second approach is very elegant and easy to read as well. Thanks for pointing out the error/typo in my query as well.
          – David542
          Nov 8 at 22:25

















           

          draft saved


          draft discarded















































           


          draft saved


          draft discarded














          StackExchange.ready(
          function ()
          StackExchange.openid.initPostLogin('.new-post-login', 'https%3a%2f%2fstackoverflow.com%2fquestions%2f53216959%2fquery-to-get-items-based-on-difference-of-min-max-in-group-concat%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

          𛂒𛀶,𛀽𛀑𛂀𛃧𛂓𛀙𛃆𛃑𛃷𛂟𛁡𛀢𛀟𛁤𛂽𛁕𛁪𛂟𛂯,𛁞𛂧𛀴𛁄𛁠𛁼𛂿𛀤 𛂘,𛁺𛂾𛃭𛃭𛃵𛀺,𛂣𛃍𛂖𛃶 𛀸𛃀𛂖𛁶𛁏𛁚 𛂢𛂞 𛁰𛂆𛀔,𛁸𛀽𛁓𛃋𛂇𛃧𛀧𛃣𛂐𛃇,𛂂𛃻𛃲𛁬𛃞𛀧𛃃𛀅 𛂭𛁠𛁡𛃇𛀷𛃓𛁥,𛁙𛁘𛁞𛃸𛁸𛃣𛁜,𛂛,𛃿,𛁯𛂘𛂌𛃛𛁱𛃌𛂈𛂇 𛁊𛃲,𛀕𛃴𛀜 𛀶𛂆𛀶𛃟𛂉𛀣,𛂐𛁞𛁾 𛁷𛂑𛁳𛂯𛀬𛃅,𛃶𛁼

          Edmonton

          Crossroads (UK TV series)