Skip to content
  • Categories
  • Recent
  • Tags
  • Popular
  • World
  • Users
  • Groups
Skins
  • Light
  • Cerulean
  • Cosmo
  • Flatly
  • Journal
  • Litera
  • Lumen
  • Lux
  • Materia
  • Minty
  • Morph
  • Pulse
  • Sandstone
  • Simplex
  • Sketchy
  • Spacelab
  • United
  • Yeti
  • Zephyr
  • Dark
  • Cyborg
  • Darkly
  • Quartz
  • Slate
  • Solar
  • Superhero
  • Vapor

  • Default (No Skin)
  • No Skin
Collapse
Code Project
  1. Home
  2. Database & SysAdmin
  3. Database
  4. OVER (PARTITION BY ORDER BY )

OVER (PARTITION BY ORDER BY )

Scheduled Pinned Locked Moved Database
databasesql-serverhelptutorial
13 Posts 7 Posters 0 Views 1 Watching
  • Oldest to Newest
  • Newest to Oldest
  • Most Votes
Reply
  • Reply as topic
Log in to reply
This topic has been deleted. Only users with topic management privileges can see it.
  • A Offline
    A Offline
    Ambertje
    wrote on last edited by
    #1

    Hello everyone, I'm trying to understand this function. Someone wrote this piece of code and I would like to use to do something simular. On a daily basis we read .txt files into our SQL database through SSIS. The data that's going through is growing fast and takes a long time to process. (for example a year of data is read every day into the db) I want to make a dayset so that we only read one single day into the DB on top of the existing data and not the whole year. Someone wrote this peace of code:

    Select * , ROW_NUMBER() OVER (PARTITION BY PK_Assignment ORDER BY DATE, TIME) as LineNbr
    from ProductivityColliDagSet

    I was wondering what the Partition By statement means. My guess was that you have to place the fields there that makes the record unique. Can someone help me out with this because I read so many things on the internet and still I don't understand. Also I don't have much experience with SQL, just the basics. Ambertje

    P L J G 4 Replies Last reply
    0
    • A Ambertje

      Hello everyone, I'm trying to understand this function. Someone wrote this piece of code and I would like to use to do something simular. On a daily basis we read .txt files into our SQL database through SSIS. The data that's going through is growing fast and takes a long time to process. (for example a year of data is read every day into the db) I want to make a dayset so that we only read one single day into the DB on top of the existing data and not the whole year. Someone wrote this peace of code:

      Select * , ROW_NUMBER() OVER (PARTITION BY PK_Assignment ORDER BY DATE, TIME) as LineNbr
      from ProductivityColliDagSet

      I was wondering what the Partition By statement means. My guess was that you have to place the fields there that makes the record unique. Can someone help me out with this because I read so many things on the internet and still I don't understand. Also I don't have much experience with SQL, just the basics. Ambertje

      P Online
      P Online
      PIEBALDconsult
      wrote on last edited by
      #2

      http://msdn.microsoft.com/en-us/library/ms186734.aspx[^]

      You'll never get very far if all you do is follow instructions.

      A 1 Reply Last reply
      0
      • P PIEBALDconsult

        http://msdn.microsoft.com/en-us/library/ms186734.aspx[^]

        You'll never get very far if all you do is follow instructions.

        A Offline
        A Offline
        Ambertje
        wrote on last edited by
        #3

        I've seen this already but still not clear to me sorry :confused:

        1 Reply Last reply
        0
        • A Ambertje

          Hello everyone, I'm trying to understand this function. Someone wrote this piece of code and I would like to use to do something simular. On a daily basis we read .txt files into our SQL database through SSIS. The data that's going through is growing fast and takes a long time to process. (for example a year of data is read every day into the db) I want to make a dayset so that we only read one single day into the DB on top of the existing data and not the whole year. Someone wrote this peace of code:

          Select * , ROW_NUMBER() OVER (PARTITION BY PK_Assignment ORDER BY DATE, TIME) as LineNbr
          from ProductivityColliDagSet

          I was wondering what the Partition By statement means. My guess was that you have to place the fields there that makes the record unique. Can someone help me out with this because I read so many things on the internet and still I don't understand. Also I don't have much experience with SQL, just the basics. Ambertje

          L Offline
          L Offline
          Lost User
          wrote on last edited by
          #4

          It determines the grouping. Play around with below script;

          BEGIN TRANSACTION

          CREATE TABLE SomeTest(
          	Field1 INTEGER,
          	Field2 CHAR(1),
          	Data VARCHAR(50))
          	
          INSERT INTO SomeTest VALUES (1, 'C', 'Test')
          INSERT INTO SomeTest VALUES (1, 'A', 'Test')
          INSERT INTO SomeTest VALUES (7, 'C', 'Test')
          INSERT INTO SomeTest VALUES (7, 'A', 'Test')
          INSERT INTO SomeTest VALUES (4, 'C', 'Test')
          
          SELECT \*
               , ROW\_NUMBER() OVER ( PARTITION BY Field2 ORDER BY Field1 ) 
            FROM SomeTest
          

          ROLLBACK

          If you change the field that's being partitioned by to "Field1", you'll see a different grouping in the result-set (with each group receiving a unique numbering). It's often used with a primary key because some idiot forgot to add an identity-field :)

          Bastard Programmer from Hell :suss: If you can't read my code, try converting it here[^]

          P A 2 Replies Last reply
          0
          • L Lost User

            It determines the grouping. Play around with below script;

            BEGIN TRANSACTION

            CREATE TABLE SomeTest(
            	Field1 INTEGER,
            	Field2 CHAR(1),
            	Data VARCHAR(50))
            	
            INSERT INTO SomeTest VALUES (1, 'C', 'Test')
            INSERT INTO SomeTest VALUES (1, 'A', 'Test')
            INSERT INTO SomeTest VALUES (7, 'C', 'Test')
            INSERT INTO SomeTest VALUES (7, 'A', 'Test')
            INSERT INTO SomeTest VALUES (4, 'C', 'Test')
            
            SELECT \*
                 , ROW\_NUMBER() OVER ( PARTITION BY Field2 ORDER BY Field1 ) 
              FROM SomeTest
            

            ROLLBACK

            If you change the field that's being partitioned by to "Field1", you'll see a different grouping in the result-set (with each group receiving a unique numbering). It's often used with a primary key because some idiot forgot to add an identity-field :)

            Bastard Programmer from Hell :suss: If you can't read my code, try converting it here[^]

            P Online
            P Online
            PIEBALDconsult
            wrote on last edited by
            #5

            Eddy Vluggen wrote:

            some idiot forgot to added an identity-field

            FTFY

            You'll never get very far if all you do is follow instructions.

            L 1 Reply Last reply
            0
            • P PIEBALDconsult

              Eddy Vluggen wrote:

              some idiot forgot to added an identity-field

              FTFY

              You'll never get very far if all you do is follow instructions.

              L Offline
              L Offline
              Lost User
              wrote on last edited by
              #6

              I was more expecting at someone pointing out the option to count items based on particular groupings. Sounds like you really dislike the identity-field? :)

              Bastard Programmer from Hell :suss: If you can't read my code, try converting it here[^]

              J 1 Reply Last reply
              0
              • L Lost User

                I was more expecting at someone pointing out the option to count items based on particular groupings. Sounds like you really dislike the identity-field? :)

                Bastard Programmer from Hell :suss: If you can't read my code, try converting it here[^]

                J Offline
                J Offline
                Jorgen Andersson
                wrote on last edited by
                #7

                Real databases use a sequence. ;-)

                Wrong is evil and must be defeated. - Jeff Ello[^]

                M 1 Reply Last reply
                0
                • A Ambertje

                  Hello everyone, I'm trying to understand this function. Someone wrote this piece of code and I would like to use to do something simular. On a daily basis we read .txt files into our SQL database through SSIS. The data that's going through is growing fast and takes a long time to process. (for example a year of data is read every day into the db) I want to make a dayset so that we only read one single day into the DB on top of the existing data and not the whole year. Someone wrote this peace of code:

                  Select * , ROW_NUMBER() OVER (PARTITION BY PK_Assignment ORDER BY DATE, TIME) as LineNbr
                  from ProductivityColliDagSet

                  I was wondering what the Partition By statement means. My guess was that you have to place the fields there that makes the record unique. Can someone help me out with this because I read so many things on the internet and still I don't understand. Also I don't have much experience with SQL, just the basics. Ambertje

                  J Offline
                  J Offline
                  jschell
                  wrote on last edited by
                  #8

                  Ambertje wrote:

                  I want to make a dayset so that we only read one single day into the DB on top of the existing data and not the whole year.

                  I don't see what that has to do with partitions - the database of course wouldn't have anything to do with reading files.

                  Ambertje wrote:

                  and takes a long time to process.

                  Someone should optimize that process. I wouldn't be surprised if that means moving it out of SSIS but maybe it can be sped up as is. Normally one profiles a process by actually timing the various parts and then using that data to determine where things can be made faster. Although your description might suggest that every day you read the previous years data. If so one obvious optimization there would be to some producing a file that has a years worth of data. How one does that depends on the data.

                  1 Reply Last reply
                  0
                  • J Jorgen Andersson

                    Real databases use a sequence. ;-)

                    Wrong is evil and must be defeated. - Jeff Ello[^]

                    M Offline
                    M Offline
                    Mycroft Holmes
                    wrote on last edited by
                    #9

                    Begone with your Oracle concepts bah humbug!

                    Never underestimate the power of human stupidity RAH

                    J 1 Reply Last reply
                    0
                    • A Ambertje

                      Hello everyone, I'm trying to understand this function. Someone wrote this piece of code and I would like to use to do something simular. On a daily basis we read .txt files into our SQL database through SSIS. The data that's going through is growing fast and takes a long time to process. (for example a year of data is read every day into the db) I want to make a dayset so that we only read one single day into the DB on top of the existing data and not the whole year. Someone wrote this peace of code:

                      Select * , ROW_NUMBER() OVER (PARTITION BY PK_Assignment ORDER BY DATE, TIME) as LineNbr
                      from ProductivityColliDagSet

                      I was wondering what the Partition By statement means. My guess was that you have to place the fields there that makes the record unique. Can someone help me out with this because I read so many things on the internet and still I don't understand. Also I don't have much experience with SQL, just the basics. Ambertje

                      G Offline
                      G Offline
                      GuyThiebaut
                      wrote on last edited by
                      #10

                      The best way to understand this is to create a couple of tables and experiment. It is quite difficult to explain what is going on in a partition statement - the closest I can get is transposing data in Excel. However that does not explain how to go about transposing the data. Think of it as changing column headings into row contents and row contents into column headings.

                      “That which can be asserted without evidence, can be dismissed without evidence.”

                      ― Christopher Hitchens

                      A 1 Reply Last reply
                      0
                      • L Lost User

                        It determines the grouping. Play around with below script;

                        BEGIN TRANSACTION

                        CREATE TABLE SomeTest(
                        	Field1 INTEGER,
                        	Field2 CHAR(1),
                        	Data VARCHAR(50))
                        	
                        INSERT INTO SomeTest VALUES (1, 'C', 'Test')
                        INSERT INTO SomeTest VALUES (1, 'A', 'Test')
                        INSERT INTO SomeTest VALUES (7, 'C', 'Test')
                        INSERT INTO SomeTest VALUES (7, 'A', 'Test')
                        INSERT INTO SomeTest VALUES (4, 'C', 'Test')
                        
                        SELECT \*
                             , ROW\_NUMBER() OVER ( PARTITION BY Field2 ORDER BY Field1 ) 
                          FROM SomeTest
                        

                        ROLLBACK

                        If you change the field that's being partitioned by to "Field1", you'll see a different grouping in the result-set (with each group receiving a unique numbering). It's often used with a primary key because some idiot forgot to add an identity-field :)

                        Bastard Programmer from Hell :suss: If you can't read my code, try converting it here[^]

                        A Offline
                        A Offline
                        Ambertje
                        wrote on last edited by
                        #11

                        Eddy, This example made it clear to me, I think I understand what it's doing. Now I can try to rewrite the code to my needs. Thank you for taking the time to help me :thumbsup: Ambertje

                        1 Reply Last reply
                        0
                        • G GuyThiebaut

                          The best way to understand this is to create a couple of tables and experiment. It is quite difficult to explain what is going on in a partition statement - the closest I can get is transposing data in Excel. However that does not explain how to go about transposing the data. Think of it as changing column headings into row contents and row contents into column headings.

                          “That which can be asserted without evidence, can be dismissed without evidence.”

                          ― Christopher Hitchens

                          A Offline
                          A Offline
                          Ambertje
                          wrote on last edited by
                          #12

                          Many thanks to everyone who is helping me, I really appreciate the effort you put into it to help newbe's. Ambertje

                          1 Reply Last reply
                          0
                          • M Mycroft Holmes

                            Begone with your Oracle concepts bah humbug!

                            Never underestimate the power of human stupidity RAH

                            J Offline
                            J Offline
                            Jorgen Andersson
                            wrote on last edited by
                            #13

                            :)

                            Wrong is evil and must be defeated. - Jeff Ello[^]

                            1 Reply Last reply
                            0
                            Reply
                            • Reply as topic
                            Log in to reply
                            • Oldest to Newest
                            • Newest to Oldest
                            • Most Votes


                            • Login

                            • Don't have an account? Register

                            • Login or register to search.
                            • First post
                              Last post
                            0
                            • Categories
                            • Recent
                            • Tags
                            • Popular
                            • World
                            • Users
                            • Groups