Need help with finding diff between two dates

Hi,
could someone please point me in the right direction.
I want to substract two dates to get the age of a person. One of the date is sysdate and the other is date of birth. Assuming we remove the time part of the date.
Best Regards,

Hi,
select
timestamp, sysdate,
decode(sign(sysdate-timestamp - 1/24), -1,
round(24*60*(sysdate-timestamp)) || ' minutes old ',
decode(sign(sysdate-timestamp - 1), -1,
round(24*(sysdate-timestamp)) || ' hours old ',
decode(sign(sysdate-timestamp - 14), -1,
trunc(sysdate-timestamp) || ' days old ',
decode(sign(sysdate-timestamp - 60), -1,
trunc((sysdate-timestamp)/7) || ' weeks old ',
decode(sign(sysdate-timestamp - 365), -1,
round(months_between(sysdate,timestamp)) || ' months old ',
round(months_between(sysdate,timestamp)/12,1) || ' years old '
))))) age
from t;
Regards

Similar Messages

  • Find gap between two dates from table

    Hello All,
    I want to find gap between two dates ,if there is no gap between two dates then it should return min(eff_dt) and max(end_dt) value
    suppose below data in my item table
    item_id    eff_dt           end_dt
    10         20-jun-2012     25-jun-2012
    10         26-jun-2012     28-jun-2012 There is no gap between two rows for item 10 then it should return rows like
    item_id eff_dt end_dt
    10 20-jun-2012 28-jun-2012
    item_id    eff_dt           end_dt
    12         20-jun-2012     25-jun-2012
    12         27-jun-2012     28-jun-2012 There is gap between two rows for item 12 then it should return like
    item_id eff_dt end_dt
    12 20-jun-2012 25-jun-2012
    12 27-jun-2012 28-jun-2012
    I hv tried using below query but it giv null value for last row
    SELECT   item_id, eff_dt, end_dt, end_dt + 1 AS newd,
             LEAD (eff_dt) OVER (PARTITION BY ctry_code, co_code, item_id ORDER BY ctry_code,
              co_code, item_id) AS LEAD,
             (CASE
                 WHEN (end_dt + 1) =
                        LEAD (eff_dt) OVER (PARTITION BY ctry_code, co_code, item_id ORDER BY ctry_code,
                         co_code, item_id, eff_dt)
                    THEN '1'
                 ELSE '2'
              END
             ) AS new_num
      FROM item
       WHERE TRIM (item_id) = '802'
    ORDER BY ctry_code, co_code, item_id, eff_dtI m using oracle 10g.
    please any help is appreciate.
    Thanks.

    Use start of group method:
    with sample_table as (
                          select 10 item_id,date '2012-6-20' start_dt,date '2012-6-25' end_dt from dual union all
                          select 10,date '2012-6-26',date '2012-6-26' from dual
    select  item_id,
            min(start_dt) start_dt,
            max(end_dt) end_dt
      from  (
             select  item_id,
                     start_dt,
                     end_dt,
                     sum(start_of_group) over(partition by item_id order by start_dt) grp
               from  (
                      select  item_id,
                              start_dt,
                              end_dt,
                              case lag(end_dt) over(partition by item_id order by start_dt)
                                when start_dt - 1 then 0
                                else 1
                              end start_of_group
                        from  sample_table
      group by item_id,
               grp
      order by item_id,
               grp
       ITEM_ID START_DT  END_DT
            10 20-JUN-12 26-JUN-12
    SQL> SY.

  • Diff between two date

    i hv two date type data along with time lets say
    p1 '21-jan-2001 12:43:05'
    p2 '22-jan-2001 13:33:10'
    i want diff between two dates p1-p2 will give only the number of days in between but i want even the time also
    for ex in the above ex the diff etween two days is 1 day 1hr bla bla.......

    Check that link... it will offer you a few alternatives:
    http://www.orafaq.com/faq/how_does_one_get_the_time_difference_between_two_date_columns
    HTH,
    Thierry
    with dates as (
    select to_date('22-jan-2001 13:33:10', 'DD-MON-YYYY HH24:MI:SS') as date1,
    to_date('21-jan-2001 12:43:05', 'DD-MON-YYYY HH24:MI:SS') as date2 from dual)
    SELECT floor(((date1-date2)*24*60*60)/3600)
                || ' HOURS ' ||
                floor((((date1-date2)*24*60*60) -
                floor(((date1-date2)*24*60*60)/3600)*3600)/60)
                || ' MINUTES ' ||
                round((((date1-date2)*24*60*60) -
                floor(((date1-date2)*24*60*60)/3600)*3600 -
                (floor((((date1-date2)*24*60*60) -
                floor(((date1-date2)*24*60*60)/3600)*3600)/60)*60) ))
                || ' SECS ' time_difference
    FROM dates;
    24 HOURS 50 MINUTES 5 SECS Edited by: Thierry H. on Mar 3, 2011 5:51 PM

  • Need help with representing 2 bits of data in a column

    I Need help representing only 2 bits of data in a column in order to save space.
    Is that possible?

    CommitMan wrote:
    I Need help representing only 2 bits of data in a column in order to save space.
    Is that possible?Yes - using Assembler....
    If you need to count bits to save space, then you must be on 70's, or early 80's, hardware. So using Assembler should not be a problem. Let me guess.. a 8051 microcontroller from the 1980?
    Here's what the 8051 code and memory optimisation manual says:
    >
    The simplest and best way to get dramatic improvements
    in efficiency is to look for all variables that will have only
    binary values (0 and not 0), and define them as type 'bit‘:
    bit myVar;With bit variables, the full set of 8051 bit-level assembler
    instructions can be used to generate very fast and
    compact code. For example, the following C code:
    myVar = ~myVar;
    if (!myVar)
    }Generates only two lines of assembler:
    B200    CPL myVar
    200006  JB myvar,?C0002This example uses only 5 flash bytes and 8 CPU cycles.
    When you use bit variables, you can implement a
    nontrivial line of C code with just one assembler
    instruction.
    >
    <i>PS. Yes, the above is really from a manual for a real 80s microcontroller. And yes, I'm poking fun at your question as saving bits were a problem in the 80s and prior. It should not be a problem in the 21st century information system and database.</i>

  • To find difference between two dates

    Hi all,
    I am new to this forum and oracle.
    I want to get the difference between two dates. My query is as below...
    sqlserver_utilities.datediff('YY', startdate,enddate)
    I want the difference in year.
    Please help me. It's really urgent.
    Thanks in advance.
    Regards,
    Inam

    Select to_char(enddate,'YY') - to_char(startdate,'YY') fromPLEASE don't do that. There are so many things wrong with it...
    for example:
    1). Why are you subtracting character data types?
    2). What if the start date is 1999 and the end date is 2000? Do you expect to get a difference of -1?
    3). What if the start date is 1 Jan 2000 and the end date is 31 Dec 2000? Do you expect to get 0 instead of 1 or .997?
    4). Why would you convert dates to something else when they are inherently subtractable.
    5). There are obvious points in the OP's "specification" that are vague - the best thing (after telling them to search, of course since this has been answered a million times already) would be to try to clarify the spec.
    John

  • I need help with finding right stylus pen for lenovo yoga 2 pro!

    I did read other person's post, but I did not find my answer. I am currently using my fingers to write my notes and it drives me nuts! I do have a stylus pen that have huge round fabric tip. It does not write well. I want a stylus pen with pointy end so I can acturally take my notes on OneNote. I writes equations down so it is very hard to write small and neat with my hand. I do know that my laptop is touch sensitive so it only works with rubber or fabric tips! I could not find any stylus pen with those tip that are pointy.... I need help on finding pointy tipped stylus pen that will let me write well. I am ordering ati-glare screen protector because I can see myself on the screen like a mirror... lol Hopefully this will not keep me from finding a pen that works well! Please give me link to the pen, if you can! Thank you for reading!

    ColonelONeill is correct.
    The Yoga 2 Pro does not have a digitizer, so a capacitative stylus, which mimics a fingertip, is what you'd need.
    Regards.
    English Community   Deutsche Community   Comunidad en Español   Русскоязычное Сообщество
    Community Resources: Participation Rules • Images in posts • Search (Advanced) • Private Messaging
    PM requests for individual support are not answered. If a post solves your issue, please mark it so.
    X1C3 Helix X220 X301 X200T T61p T60p Y3P • T520 T420 T510 T400 R400 T61 Y2P Y13
    I am not a Lenovo employee.

  • Date/hour diff between two date/timestamps - however dataype in DB is curr varchar

    Hi All
    Could someone please help me?
    I would like the T-SQL statement for hours passed between two date/timestamps within a table
    e.g
    Login_Time
     22/02/2014 11:03:12.925297 AM    (Data type in DB is varchar(50))
    Logout_Time
    22/02/2014 11:19:01.701073 AM      (Data type in DB is varchar(50))
    Thank you Kindly

    DECLARE @dt AS VARCHAR(50)='22/02/2014 11:03:12.925297 AM'
    DECLARE @dt1 AS VARCHAR(50)='22/02/2014 11:19:01.701073 AM' 
    SELECT DATEDIFF(hour,dt_from,dt_to) FROM
    SELECT CAST(SUBSTRING(@dt,7,4)+ SUBSTRING(@dt,4,2)+SUBSTRING(@dt,1,2)+
    SUBSTRING (@dt,11,17)  AS DATETIME2) dt_from,
    CAST(SUBSTRING(@dt1,7,4)+ SUBSTRING(@dt1,4,2)+SUBSTRING(@dt1,1,2)+
    SUBSTRING (@dt1,11,17)  AS DATETIME2) dt_to
    ) AS Der
    Best Regards,Uri Dimant SQL Server MVP,
    http://sqlblog.com/blogs/uri_dimant/
    MS SQL optimization: MS SQL Development and Optimization
    MS SQL Consulting:
    Large scale of database and data cleansing
    Remote DBA Services:
    Improves MS SQL Database Performance
    SQL Server Integration Services:
    Business Intelligence

  • Diff between Two dates

    I am Unable to find the Diffrence betweeen two dates. can you please help how i find the difference between tow dates.
    Thanks,

    Hi,
    As Bhushan showed, the result of subtracting one DATE from another is the number of days between them.
    If
    d1 is 06:00:00 on April 19, 2010, and
    d2 is 12:00:00 on April 20, 2010, then
    d2 - d1is 1.25, because d2 is 1 day plus 6 hours (6/24 = .25) days after d1.
    If you want the difference in months or years, use the MONTHS_BETWEEN function:
    MONTHS_BETWEEN (d2, d1)is the number of months that d2 is after d1, and
    MONTHS_BETWEEN (d2, d1) / 12is the number of years.

  • Problem with calculate difference between two dates on monday to saturday

    Hello,
    I need some help to edit a function tu return number of hours between to dates, including saturdays (09:00 - 14:00) and monday to friday (09:00-21:00);
    This is my code;
    CREATE OR REPLACE
    FUNCTION TEST2( FECHA_INICIO DATE, FECHA_FIN DATE)
        RETURN NUMBER IS HORASTOTALES NUMBER;
        fecha date;
        BEGIN
        if(
          SELECT fecha, to_char(fecha, 'DY', 'NLS_DATE_LANGUAGE=ENGLISH') Dia
        FROM (SELECT to_date('FECHA_INICIO') + LEVEL - 1 fecha
               FROM DUAL
            CONNECT BY LEVEL <= (FECHA_FIN - FECHA_INICIO))
      WHERE TO_CHAR(FECHA, 'DY', 'NLS_DATE_LANGUAGE=ENGLISH') not IN ('SAT') THEN
            with t as (
            SELECT  CASE LEVEL
                                 when 1 then greatest(fecha_inicio,trunc(fecha_inicio) + 9 / 24)
                                 else trunc(fecha_inicio) + level - 15 / 24
                               end fecha_inicio,
                               case connect_by_isleaf
                                 when 1 then least(fecha_fin,trunc(fecha_fin) + 21 / 24)
                                 else trunc(fecha_inicio) + level - 3 / 24
                               end fecha_fin
                         from  dual
                         connect by level <= trunc(fecha_fin) - trunc(fecha_inicio) + 1 )
            select  sum(greatest(fecha_fin - fecha_inicio,0)) * 24 horas
              into  horastotales
              FROM  T
                       WHERE TRUNC(FECHA_INICIO) - TRUNC(FECHA_INICIO,'iw') < 5 ;
            RETURN HORASTOTALES ;
            ) ELSE IF
            return HORASTOTALES+5;
    END;
    regards

    Ok, let's try this one then. it works as a function, and if you extract the query, it can work as a single cursor too.
    create or replace function test2( p_start_date date, p_end_date date) return number
    is
       t_result number;
    begin
       with firstday as ( select case to_char(p_start_date,'fmdy','NLS_DATE_LANGUAGE=ENGLISH')
                                when 'sun' then 0
                                when 'sat' then 9-least(14,to_char(p_start_date,'hh24'))
                                else 9-least(21,to_char(p_start_date,'hh24'))
                             end day
                        from dual ),
            alldays  as (select sum(case to_number(to_char(p_start_date+level-1,'d'))
                                       when 1 then 0
                                       when 7 then 5
                                       else 12
                                    end) days
                           from dual
                         connect by level <= p_end_date - p_start_date + 1),  
             lastday as ( select case to_char(p_end_date,'fmdy','NLS_DATE_LANGUAGE=ENGLISH')
                                when 'sun' then 0
                                when 'sat' then -14+least(14,to_char(p_end_date,'hh24'))
                                else -21+least(21,to_char(p_end_date,'hh24'))
                             end day
                        from dual )
       select sum(t1.day+t2.days+t3.day)
         into t_result
         from firstday t1
            , alldays  t2
            , lastday  t3;
       return t_result;
    end;

  • How to get the diff between two dates  -  # of days

    Hi Experts,
    I have requirement to know the difference between dates. In my presentation layer two columns as created date and updated date. I want to know the difference in # of days in the presentation services.
    Please provide some pointers.
    Thanks in adv
    svr

    Hi,
    In the presentation layer you can create a column with a custom formula of this:
    TIMESTAMPDIFF(SQL_TSI_DAY, datecolumn1,datecolumn2)
    The result shown in the column will be the difference in days between the two dates.
    Regards,
    Matt

  • Need help with finding "my" camera..

    I'm having difficulty finding a camera with specific features that are important for me. I would greatly appreciate any help in finding the brand and model that fits the bill. I've googled and googled, without any luck. Help!  I'm looking for a digital camera with:
    1. GPS
    2. "small" size (gotta fit in my purse, no camera bags for me!)
    3. viewfinder
    4. takes AA batteries
    TIA

    As a GPS and AA enthusiast, I too have been waiting for a similar combination.
    nuff said about GPS models like the NIkon AW100, P510, S9300 similar models using propreitary batteries.
    DSLR with AA powered grips don't fit your portability factor
    have you considered an AA powered data logger?  I use the discontinued Sony GPS-CS1.  Not only does it provide a data file to sync with my camera clock, but it also draws a breadcrumb on where I go so I can look it up on a map afterwards.

  • MOVED: need help with finding gpu for win 7

    This topic has been moved to MSI Notebook.
    https://forum-en.msi.com/index.php?topic=128552.0

    Mike,
    I'm not going to be much help with Boot Camp however I can direct you to the Boot Camp forum where there are more people that know how to troubleshoot it and Windoze 7. You can find it at:
    https://discussions.apple.com/community/windows_software/boot_camp
    Roger

  • Need help with query that can look data back please help.

    hi guys i have a table like such
    CREATE TABLE "FGL"
        "FGL_GRNT_CODE" VARCHAR2(60),
        "FGL_FUND_CODE" VARCHAR2(60),
        "FGL_ACCT_CODE" VARCHAR2(60),
        "FGL_ORGN_CODE" VARCHAR2(60),
        "FGL_PROG_CODE" VARCHAR2(60),
        "FGL_GRNT_YEAR" VARCHAR2(60),
        "FGL_PERIOD"    VARCHAR2(60),
        "FGL_BUDGET"    VARCHAR2(60)
      )and i have a data like such
    Insert into FGL (FGL_GRNT_CODE,FGL_FUND_CODE,FGL_ACCT_CODE,FGL_ORGN_CODE,FGL_PROG_CODE,FGL_GRNT_YEAR,FGL_PERIOD,FGL_BUDGET) values ('240055','240055','7600','4730','02','11','1','400');
    Insert into FGL (FGL_GRNT_CODE,FGL_FUND_CODE,FGL_ACCT_CODE,FGL_ORGN_CODE,FGL_PROG_CODE,FGL_GRNT_YEAR,FGL_PERIOD,FGL_BUDGET) values ('240055','240055','7600','4730','02','10','1','100');
    Insert into FGL (FGL_GRNT_CODE,FGL_FUND_CODE,FGL_ACCT_CODE,FGL_ORGN_CODE,FGL_PROG_CODE,FGL_GRNT_YEAR,FGL_PERIOD,FGL_BUDGET) values ('240055','240055','7240','4730','02','10','1','0');
    Insert into FGL (FGL_GRNT_CODE,FGL_FUND_CODE,FGL_ACCT_CODE,FGL_ORGN_CODE,FGL_PROG_CODE,FGL_GRNT_YEAR,FGL_PERIOD,FGL_BUDGET) values ('240055','240055','7240','4730','02','10','14','200');
    Insert into FGL (FGL_GRNT_CODE,FGL_FUND_CODE,FGL_ACCT_CODE,FGL_ORGN_CODE,FGL_PROG_CODE,FGL_GRNT_YEAR,FGL_PERIOD,FGL_BUDGET) values ('240055','240055','7600','4730','02','10','14','100');
    Insert into FGL (FGL_GRNT_CODE,FGL_FUND_CODE,FGL_ACCT_CODE,FGL_ORGN_CODE,FGL_PROG_CODE,FGL_GRNT_YEAR,FGL_PERIOD,FGL_BUDGET) values ('240055','240055','7600','4730','02','10','2','100');
    Insert into FGL (FGL_GRNT_CODE,FGL_FUND_CODE,FGL_ACCT_CODE,FGL_ORGN_CODE,FGL_PROG_CODE,FGL_GRNT_YEAR,FGL_PERIOD,FGL_BUDGET) values ('240055','240055','7470','4730','02','10','2','200');I bascially need to get the total of the budget column. however its not as simple as it sound(well atleast not for me.) the totals carry over to the new period. youll noticed the you have a period column. basically what im saying is that
    fgl_grant_year 10 period 1 = for account 7600 its $100 and $100 for period 2 you see 100 dollars again this is not to be added this is the carried over balance. which remains $100.
    so im trying to write a query that basically does the following.
    im given a period for the sake of this example lets say period 1 i get nothing else. I have to find the greates grant year grab the amount for period 14(which is the total from the previous year) and add it to the amount of the current period. in this case period 1 grnt_year 11
    so the expected outcome should be $700
    240055     240055     7240     4730     02     10     14     200
    240055     240055     7600     4730     02     10     14     100
    240055     240055     7600     4730     02     11     1     400keep in mind that im not given a year just a period.
    any help that you guys can offer would be immensely appreciated. I have been trying to get this to work for over 3 days now.
    finally broke down and put together this post
    Edited by: mlov83 on Sep 14, 2011 8:48 PM

    Frank
    wondering if you can help me modify this sql statement that you provided me with .
    table values have been modified a bit.
    Insert into FGL (FGL_GRNT_CODE,FGL_FUND_CODE,FGL_ACCT_CODE,FGL_ORGN_CODE,FGL_PROG_CODE,FGL_GRNT_YEAR,FGL_PERIOD,FGL_BUDGET) values ('240055','240055','7600','4730','02','11','00','400');
    Insert into FGL (FGL_GRNT_CODE,FGL_FUND_CODE,FGL_ACCT_CODE,FGL_ORGN_CODE,FGL_PROG_CODE,FGL_GRNT_YEAR,FGL_PERIOD,FGL_BUDGET) values ('240055','240055','7240','4730','02','10','1','100');
    Insert into FGL (FGL_GRNT_CODE,FGL_FUND_CODE,FGL_ACCT_CODE,FGL_ORGN_CODE,FGL_PROG_CODE,FGL_GRNT_YEAR,FGL_PERIOD,FGL_BUDGET) values ('240055','240055','7240','4730','02','10','1','0');
    Insert into FGL (FGL_GRNT_CODE,FGL_FUND_CODE,FGL_ACCT_CODE,FGL_ORGN_CODE,FGL_PROG_CODE,FGL_GRNT_YEAR,FGL_PERIOD,FGL_BUDGET) values ('240055','240055','7600','4730','02','11','1','400');
    Insert into FGL (FGL_GRNT_CODE,FGL_FUND_CODE,FGL_ACCT_CODE,FGL_ORGN_CODE,FGL_PROG_CODE,FGL_GRNT_YEAR,FGL_PERIOD,FGL_BUDGET) values ('360055','360055','7200','4730','02','10','1','400');
    Insert into FGL (FGL_GRNT_CODE,FGL_FUND_CODE,FGL_ACCT_CODE,FGL_ORGN_CODE,FGL_PROG_CODE,FGL_GRNT_YEAR,FGL_PERIOD,FGL_BUDGET) values ('360055','360055','7600','4730','02','10','1','400');
    Insert into FGL (FGL_GRNT_CODE,FGL_FUND_CODE,FGL_ACCT_CODE,FGL_ORGN_CODE,FGL_PROG_CODE,FGL_GRNT_YEAR,FGL_PERIOD,FGL_BUDGET) values ('240055','240055','7240','4730','02','10','14','200');
    Insert into FGL (FGL_GRNT_CODE,FGL_FUND_CODE,FGL_ACCT_CODE,FGL_ORGN_CODE,FGL_PROG_CODE,FGL_GRNT_YEAR,FGL_PERIOD,FGL_BUDGET) values ('240055','240055','7600','4730','02','10','14','100');
    Insert into FGL (FGL_GRNT_CODE,FGL_FUND_CODE,FGL_ACCT_CODE,FGL_ORGN_CODE,FGL_PROG_CODE,FGL_GRNT_YEAR,FGL_PERIOD,FGL_BUDGET) values ('240055','240055','7240','4730','02','10','14','200');
    Insert into FGL (FGL_GRNT_CODE,FGL_FUND_CODE,FGL_ACCT_CODE,FGL_ORGN_CODE,FGL_PROG_CODE,FGL_GRNT_YEAR,FGL_PERIOD,FGL_BUDGET) values ('240055','240055','7240','4730','02','10','2','100');
    Insert into FGL (FGL_GRNT_CODE,FGL_FUND_CODE,FGL_ACCT_CODE,FGL_ORGN_CODE,FGL_PROG_CODE,FGL_GRNT_YEAR,FGL_PERIOD,FGL_BUDGET) values ('240055','240055','7240','4730','02','11','2','600');i need to take one more thing into consideration. if the greatest year has a value on period 00 i need to ignore the period 14 and the current period total would be
    the current period +(current period - greatest year 00)
    hope that makes sense so in other words with the new data above. if i was querying period two of grant year 11. i would end up with $800
    because the greatest year is 11 it contains a period 0 with amount of $400 so my total should be
    period 2 amount $ 600
    period 0 amount $ 400 - period 2 amount of $600 = 200
    600+200 = $800
    if i query period 1 of grant 360055 i would just end up with 800 of grnt year 10.
    i have tried to modify that query you supplied to me with no luck. I have tried for several day but im embarrased to say i just can get it to do what im trying to do .
    can you please help me out.
    Miguel

  • Need Help With find and Replace

    I am a little green to this all. I am trying to find and
    replace a word inside the edit region and Dreamweaver will not
    change it, because it says its inside a locked region, but its a
    editable region?
    I have about 900 pages I need to make this change on and was
    relying on the find and replace tool to do that. I tried differn't
    advanced options, nothing seams to change it. I am using cs3.
    Thanks for any help

    Using Templates with a 900 page site is a crime against
    humanity. You reach
    the optimal size for Templates between about 50 and 100.
    The error you are getting suggests that there are coding
    errors on the page
    (perhaps even unrelated to ANY DW Template markup). We'd need
    to see the
    page to make progress with what that might be, as Alan says.
    Murray --- ICQ 71997575
    Adobe Community Expert
    (If you *MUST* email me, don't LAUGH when you do so!)
    ==================
    http://www.projectseven.com/go
    - DW FAQs, Tutorials & Resources
    http://www.dwfaq.com - DW FAQs,
    Tutorials & Resources
    ==================
    "RyanWaters" <[email protected]> wrote in
    message
    news:ggs7fq$gnq$[email protected]..
    >I am a little green to this all. I am trying to find and
    replace a word
    >inside
    > the edit region and Dreamweaver will not change it,
    because it says its
    > inside
    > a locked region, but its a editable region?
    > I have about 900 pages I need to make this change on and
    was relying on
    > the
    > find and replace tool to do that. I tried differn't
    advanced options,
    > nothing
    > seams to change it. I am using cs3. Thanks for any help
    >

  • Need Help with finding Mean across rows

    Hi all,
    I have a requirement of finding mean of several columns across a row. The tricky part is there might or might not be a value in each of the rows & the average must be calculated for the ones which has a value. Let me give you an example:
    col1 col2 col2 col4
    1 NULL 3 5 --> Mean will be (1+3+5)/3 = 3
    NULL NULL 2 4 --> Mean will be (2+4)/2 = 3.
    One option (dump acc to me) is to get the whole record into a %ROWTYPE variable, parse through each of the columns, see if the value is not null & greater than 0, increment the counter (i) & calculate the sum. Finally do a sum/i. One mean has 215 columns that needs to be averaged and having a separate if-end if seems illogical. there must be a smart solution to find this kind of average. Please help.
    Thanks,
    Sirisha

    Hi, Sirisha,
    siri_me wrote:
    Hi all,
    I have a requirement of finding mean of several columns across a row. The tricky part is there might or might not be a value in each of the rows & the average must be calculated for the ones which has a value. Let me give you an example:
    col1 col2 col2 col4
    1 NULL 3 5 --> Mean will be (1+3+5)/3 = 3
    NULL NULL 2 4 --> Mean will be (2+4)/2 = 3.If you only have a few columns, you can do something like this:
    SELECT          (NVL (col1, 0)     + NVL (col2, 0)     + NVL (col3, 0)     + NVL (col4, 0)
          / NULLIF ( NVL2 (col1, 1, 0) + NVL2 (col2, 1, 0) + NVL2 (col3, 1, 0) + NVL2 (col4, 1, 0)
                      , 0
    FROM     table_x
    One option (dump acc to me) What does "dump acc to me" mean?
    is to get the whole record into a %ROWTYPE variable, parse through each of the columns, see if the value is not null & greater than 0, increment the counter (i) & calculate the sum. Finally do a sum/i. One mean has 215 columns that needs to be averaged and having a separate if-end if seems illogical. there must be a smart solution to find this kind of average. Please help.The smart way is to store the numbers in one column to begin with. The fact that it makes sense to take an average of them indicates that they are the same entity, so rather than a table like this:
    id     col1     col2     col3     col4
    10     1          3     5
    11               2     4it would make more sense to have a table like this:
    id     val     attr
    10     1     1
    10     3     3
    10     5     4
    11     2     3
    11     4     4If you are stuck with a design like the former, with col1, col2, col3 and col4 (or ... col215) then you can Unpoivot the data into a form like the latter, with only 3 columns. Then you can use the AVG function.

Maybe you are looking for