ssis strange problem

  • Hi everyone,

    I have a strange requirement in SSIS, that I wanted to share with you all, and need some idea on how can I implement it...

    I have to associate my source data with a date range and add a SEQUENCE column to the target based on that date range....

    Actually I load data everyday(daily load) and it come in with an Account Number primary key(, but the day when I start loading it from from that day to + 5 days I have to maintain a sequence column (initial =1) and if the same account comes in that date range I have to increment the SEQUENCE column by 1....

    Now after 5 days I have to restart the counts...and if same account comes again I have to SEQUENCE it as 1 now (now again wait 5 days , if it comes in 5 days increment sequence otherwise start new sequence)

    Now my problem is that I have to maintain a date range separately for every account and I don't know how and where to maintain it... as from the src I am just getting one date , that tells me the record in date, I have to check this date against the date range for every account...

    INPUT is like

    ACcno InDAte

    A1 1-Jul 2010

    A2 1-Jul 2010

    A2 3-Jul 2010

    A2 4-Jul 2010

    A2 6-Jul 2010

    A3 6-Jul 2010

    A2 11-Jul 2010

    A2 19-Jul 2010

    Output should be like

    ACcno InDAte Sequence

    A1 1-Jul 2010 1

    A2 1-Jul 2010 1

    A2 3-Jul 2010 2

    A2 4-Jul 2010 3

    A2 6-Jul 2010 1

    A3 6-Jul 2010 1

    A2 11-Jul 2010 1

    A2 13-Jul 2010 2

    You can see as the Indate for A2 changes sequence keeps on incrementing in 5 days range....

    Any help on this...

    Thanks

  • Hi Ria,

    This is simple. You have to use SQL Windowing functions such as ROW_NUMBER,RANK,DENSE_RANK with the OVER CLAUSE using Partition...:cool::cool::cool:

    Hope this helps!!!

    Raunak J

  • Hi ,

    Thanks but I cannot think of this scenario being solved using CTE...

    What do you think I should use in Partition by for this scenario as I cannot partition by any column I have to use the insertdate + 5 for every account ..

    ROW_NUMBER() OVER (PARTITION BY?? )

    Can you explain more...

  • here is some sample data...

    CREATE TABLE [abc1](

    [I_KEY] [int] NULL,

    [A_NO] [nvarchar](14) NULL,

    [IN_DATE] [datetime] NULL,

    [Sequence] [int] NULL

    )

    INSERT INTO abc1 ( I_KEY,A_NO,IN_DATE,Sequence) VALUES ( 1, '23', 'Jul 1 2010', NULL)

    INSERT INTO abc1 ( I_KEY,A_NO,IN_DATE,Sequence) VALUES ( 2, '23', 'Jul 4 2010 ', NULL)

    INSERT INTO abc1 ( I_KEY,A_NO,IN_DATE,Sequence) VALUES ( 3, '23', 'Jul 5 2010', NULL)

    INSERT INTO abc1 ( I_KEY,A_NO,IN_DATE,Sequence) VALUES ( 4, '23', 'Jul 6 2010 ', NULL)

    INSERT INTO abc1 ( I_KEY,A_NO,IN_DATE,Sequence) VALUES ( 5, '23', 'Jul 8 2010 ', NULL)

    INSERT INTO abc1 ( I_KEY,A_NO,IN_DATE,Sequence) VALUES ( 6, '23', 'Jul 15 2010 ', NULL)

    INSERT INTO abc1 ( I_KEY,A_NO,IN_DATE,Sequence) VALUES ( 7, '23', 'Jul 16 2010 ', NULL)

    INSERT INTO abc1 ( I_KEY,A_NO,IN_DATE,Sequence) VALUES ( 8, '23', 'Jul 21 2010 ', NULL)

    Just to make sure that my INDATE will act as the starting point for the date range....

    Thanks

    Account no 23 is coming in 3 ranges out put will be like this

    1232010-07-01 00:00:00.000 1

    2232010-07-04 00:00:00.0002

    3232010-07-05 00:00:00.0003

    4232010-07-06 00:00:00.000 1

    5232010-07-08 00:00:00.0002

    6232010-07-15 00:00:00.0001

    7232010-07-16 00:00:00.0002

    8232010-07-21 00:00:00.0001

  • Hi all,

    Any help on this,

    The only way I can think of doing this is to maintain a separate stage table for every account with 2 dates in 5 date range period and when the 5th day crosses, either update or insert a new row for that account.....

    but it looks not very efficient to me...

  • Raunak Jhawar (7/13/2010)


    Hi Ria,

    This is simple. You have to use SQL Windowing functions such as ROW_NUMBER,RANK,DENSE_RANK with the OVER CLAUSE using Partition...:cool::cool::cool:

    Hope this helps!!!

    Please present your simple solution.

    If you haven't even tried to resolve your issue, please don't expect the hard-working volunteers here to waste their time providing links to answers which you could easily have found yourself.

  • This is looking like a challenge. Other than using a chunk of procedural code to read through the data line by line (in order) and add a 'Group Number' field, nothing is coming to mind.

    I would be tempted to post this on the T-SQL forum - there are some wizards there that probably don't check this one and they might be able to help.

    If you haven't even tried to resolve your issue, please don't expect the hard-working volunteers here to waste their time providing links to answers which you could easily have found yourself.

  • ok

    [font="Comic Sans MS"]
    ---------------------------------------------------

    Thanks [/font]

  • Here is the solution in SSIS...

    Pls Let me know , how can I do the same in T-SQL, do you want me to post it there again

  • riajain9 (7/13/2010)


    Here is the solution in SSIS...

    Pls Let me know , how can I do the same in T-SQL, do you want me to post it there again

    Yes - I would suggest posting this in the T-SQL forum here - you'll get the T-SQL experts looking at it there and they like a challenge. If it is possible in T-SQL, it would be nice to do it as your datasource, making the rest of your dataflow much simpler, I would imagine.

    If you haven't even tried to resolve your issue, please don't expect the hard-working volunteers here to waste their time providing links to answers which you could easily have found yourself.

Viewing 10 posts - 1 through 9 (of 9 total)

You must be logged in to reply to this topic. Login to reply