postgresql select distinct latest record












2















I have a table like:



id  fkey  srno  remark  date
1 A001 1
2 A001 2
3 A002 1
4 A003 1
5 A002 2


I want distinct latest record based on max srno like



2  A001  2
4 A003 1
5 A002 2









share|improve this question





























    2















    I have a table like:



    id  fkey  srno  remark  date
    1 A001 1
    2 A001 2
    3 A002 1
    4 A003 1
    5 A002 2


    I want distinct latest record based on max srno like



    2  A001  2
    4 A003 1
    5 A002 2









    share|improve this question



























      2












      2








      2








      I have a table like:



      id  fkey  srno  remark  date
      1 A001 1
      2 A001 2
      3 A002 1
      4 A003 1
      5 A002 2


      I want distinct latest record based on max srno like



      2  A001  2
      4 A003 1
      5 A002 2









      share|improve this question
















      I have a table like:



      id  fkey  srno  remark  date
      1 A001 1
      2 A001 2
      3 A002 1
      4 A003 1
      5 A002 2


      I want distinct latest record based on max srno like



      2  A001  2
      4 A003 1
      5 A002 2






      sql postgresql greatest-n-per-group






      share|improve this question















      share|improve this question













      share|improve this question




      share|improve this question








      edited Nov 21 '18 at 7:07









      a_horse_with_no_name

      297k46452547




      297k46452547










      asked Nov 21 '18 at 5:43









      Kuldeep ThakurKuldeep Thakur

      4517




      4517
























          4 Answers
          4






          active

          oldest

          votes


















          1














          use window function row_number()



          select * from (
          select *,row_number() over(PARTITION by fkey order by srno desc) rn from table1 t1
          ) t where rn=1


          you can write it by using cte



          with cte as
          (
          select *,row_number() over(PARTITION by fkey order by srno desc) rn from
          table_name t1
          ) select * from cte where rn=1





          share|improve this answer































            1














            The best way to do this in Postgres is to use DISTINCT ON:



            SELECT DISTINCT ON (fkey) id, fkey, srno
            FROM yourTable
            ORDER BY fkey, srno DESC;


            enter image description here




            Demo






            share|improve this answer































              0














              You can use correlated subquery



              select * from tablename where srno in
              (select max(srno) from tablename b where a.fkey=b.fkey)





              share|improve this answer































                0














                You may use a subquery with an IN operator



                with tab(id, fkey, srno) as 
                (
                select 1,'A001',1 union all
                select 2,'A001',2 union all
                select 3,'A002',1 union all
                select 4,'A003',1 union all
                select 5,'A002',2
                )
                select *
                from tab
                where ( fkey, srno ) in
                (
                select fkey, max(srno)
                from tab
                group by fkey
                );

                id fkey srno
                2 A001 2
                4 A003 1
                5 A002 2


                Rextester Demo






                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%2f53405895%2fpostgresql-select-distinct-latest-record%23new-answer', 'question_page');
                  }
                  );

                  Post as a guest















                  Required, but never shown

























                  4 Answers
                  4






                  active

                  oldest

                  votes








                  4 Answers
                  4






                  active

                  oldest

                  votes









                  active

                  oldest

                  votes






                  active

                  oldest

                  votes









                  1














                  use window function row_number()



                  select * from (
                  select *,row_number() over(PARTITION by fkey order by srno desc) rn from table1 t1
                  ) t where rn=1


                  you can write it by using cte



                  with cte as
                  (
                  select *,row_number() over(PARTITION by fkey order by srno desc) rn from
                  table_name t1
                  ) select * from cte where rn=1





                  share|improve this answer




























                    1














                    use window function row_number()



                    select * from (
                    select *,row_number() over(PARTITION by fkey order by srno desc) rn from table1 t1
                    ) t where rn=1


                    you can write it by using cte



                    with cte as
                    (
                    select *,row_number() over(PARTITION by fkey order by srno desc) rn from
                    table_name t1
                    ) select * from cte where rn=1





                    share|improve this answer


























                      1












                      1








                      1







                      use window function row_number()



                      select * from (
                      select *,row_number() over(PARTITION by fkey order by srno desc) rn from table1 t1
                      ) t where rn=1


                      you can write it by using cte



                      with cte as
                      (
                      select *,row_number() over(PARTITION by fkey order by srno desc) rn from
                      table_name t1
                      ) select * from cte where rn=1





                      share|improve this answer













                      use window function row_number()



                      select * from (
                      select *,row_number() over(PARTITION by fkey order by srno desc) rn from table1 t1
                      ) t where rn=1


                      you can write it by using cte



                      with cte as
                      (
                      select *,row_number() over(PARTITION by fkey order by srno desc) rn from
                      table_name t1
                      ) select * from cte where rn=1






                      share|improve this answer












                      share|improve this answer



                      share|improve this answer










                      answered Nov 21 '18 at 5:46









                      Zaynul Abadin TuhinZaynul Abadin Tuhin

                      13k21032




                      13k21032

























                          1














                          The best way to do this in Postgres is to use DISTINCT ON:



                          SELECT DISTINCT ON (fkey) id, fkey, srno
                          FROM yourTable
                          ORDER BY fkey, srno DESC;


                          enter image description here




                          Demo






                          share|improve this answer




























                            1














                            The best way to do this in Postgres is to use DISTINCT ON:



                            SELECT DISTINCT ON (fkey) id, fkey, srno
                            FROM yourTable
                            ORDER BY fkey, srno DESC;


                            enter image description here




                            Demo






                            share|improve this answer


























                              1












                              1








                              1







                              The best way to do this in Postgres is to use DISTINCT ON:



                              SELECT DISTINCT ON (fkey) id, fkey, srno
                              FROM yourTable
                              ORDER BY fkey, srno DESC;


                              enter image description here




                              Demo






                              share|improve this answer













                              The best way to do this in Postgres is to use DISTINCT ON:



                              SELECT DISTINCT ON (fkey) id, fkey, srno
                              FROM yourTable
                              ORDER BY fkey, srno DESC;


                              enter image description here




                              Demo







                              share|improve this answer












                              share|improve this answer



                              share|improve this answer










                              answered Nov 21 '18 at 5:49









                              Tim BiegeleisenTim Biegeleisen

                              224k1391143




                              224k1391143























                                  0














                                  You can use correlated subquery



                                  select * from tablename where srno in
                                  (select max(srno) from tablename b where a.fkey=b.fkey)





                                  share|improve this answer




























                                    0














                                    You can use correlated subquery



                                    select * from tablename where srno in
                                    (select max(srno) from tablename b where a.fkey=b.fkey)





                                    share|improve this answer


























                                      0












                                      0








                                      0







                                      You can use correlated subquery



                                      select * from tablename where srno in
                                      (select max(srno) from tablename b where a.fkey=b.fkey)





                                      share|improve this answer













                                      You can use correlated subquery



                                      select * from tablename where srno in
                                      (select max(srno) from tablename b where a.fkey=b.fkey)






                                      share|improve this answer












                                      share|improve this answer



                                      share|improve this answer










                                      answered Nov 21 '18 at 5:46









                                      fa06fa06

                                      13k2917




                                      13k2917























                                          0














                                          You may use a subquery with an IN operator



                                          with tab(id, fkey, srno) as 
                                          (
                                          select 1,'A001',1 union all
                                          select 2,'A001',2 union all
                                          select 3,'A002',1 union all
                                          select 4,'A003',1 union all
                                          select 5,'A002',2
                                          )
                                          select *
                                          from tab
                                          where ( fkey, srno ) in
                                          (
                                          select fkey, max(srno)
                                          from tab
                                          group by fkey
                                          );

                                          id fkey srno
                                          2 A001 2
                                          4 A003 1
                                          5 A002 2


                                          Rextester Demo






                                          share|improve this answer






























                                            0














                                            You may use a subquery with an IN operator



                                            with tab(id, fkey, srno) as 
                                            (
                                            select 1,'A001',1 union all
                                            select 2,'A001',2 union all
                                            select 3,'A002',1 union all
                                            select 4,'A003',1 union all
                                            select 5,'A002',2
                                            )
                                            select *
                                            from tab
                                            where ( fkey, srno ) in
                                            (
                                            select fkey, max(srno)
                                            from tab
                                            group by fkey
                                            );

                                            id fkey srno
                                            2 A001 2
                                            4 A003 1
                                            5 A002 2


                                            Rextester Demo






                                            share|improve this answer




























                                              0












                                              0








                                              0







                                              You may use a subquery with an IN operator



                                              with tab(id, fkey, srno) as 
                                              (
                                              select 1,'A001',1 union all
                                              select 2,'A001',2 union all
                                              select 3,'A002',1 union all
                                              select 4,'A003',1 union all
                                              select 5,'A002',2
                                              )
                                              select *
                                              from tab
                                              where ( fkey, srno ) in
                                              (
                                              select fkey, max(srno)
                                              from tab
                                              group by fkey
                                              );

                                              id fkey srno
                                              2 A001 2
                                              4 A003 1
                                              5 A002 2


                                              Rextester Demo






                                              share|improve this answer















                                              You may use a subquery with an IN operator



                                              with tab(id, fkey, srno) as 
                                              (
                                              select 1,'A001',1 union all
                                              select 2,'A001',2 union all
                                              select 3,'A002',1 union all
                                              select 4,'A003',1 union all
                                              select 5,'A002',2
                                              )
                                              select *
                                              from tab
                                              where ( fkey, srno ) in
                                              (
                                              select fkey, max(srno)
                                              from tab
                                              group by fkey
                                              );

                                              id fkey srno
                                              2 A001 2
                                              4 A003 1
                                              5 A002 2


                                              Rextester Demo







                                              share|improve this answer














                                              share|improve this answer



                                              share|improve this answer








                                              edited Nov 21 '18 at 5:58

























                                              answered Nov 21 '18 at 5:51









                                              Barbaros ÖzhanBarbaros Özhan

                                              13.2k71632




                                              13.2k71632






























                                                  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%2f53405895%2fpostgresql-select-distinct-latest-record%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

                                                  MongoDB - Not Authorized To Execute Command

                                                  How to fix TextFormField cause rebuild widget in Flutter

                                                  in spring boot 2.1 many test slices are not allowed anymore due to multiple @BootstrapWith