none
זיהוי רצפים בטבלה. RRS feed

  • שאלה

  • שלום לכולם

    מערכת מסוימת שומרת מידע בטבלה. המידע נשמר כל פרק זמן מסויים ובטבלה נשמרים הערכים וזמן הדיווח. אם ארע שינוי בערך הוא מדווח ונשמר מיידית, ואם לא אירע שינוי בערך אזי כל פרק זמן מסוים מתקבל דיווח שגם הוא נשמר בטבלה.

    לדוגמא, טבלת כלי רכב ששומרת את המיקומים שלהם. אם הרכב נוסע אזי כל X מטר מתקבל דיווח על המיקום ואם הוא לא נוסע אז אחת לכמה דקות גם כן מתקבל דיווח שפרט לזמן הערכים האחרים זהים לערך הקודם. באותה מידה ניתן לחשוב על מחירי מניות, אם המחיר משתנה מקבל דיווח מיידית, ואם אינו משתנה אזי בכל זאת לכמה זמן מתקבל דיווח.

    אני מנסה לזהות פרקי זמן שהערכים אינם משתנים, לדוגמא, מניה שמחירה יציב לאורך זמן מסוים, או עם תנודות מזעריות בלבד.

    ניסיתי כמה דרכים ולא הצלחתי.

    כל רעיון יתקבל בתודה.

    אריה

    אריה שטרן

    יום רביעי 22 אפריל 2015 09:21

תשובות

  • אהלן אריה

    בקישור הבא יש מדריך להורדה מלא בנושא שאתה מחפש. הנושא נקרא בשפת העמך gaps and islands
    הכוונה לכך שיש לך נתונים עם חורים

    תבדוק אם הקישור עוזר לך ותצבחר את הפםתרון שהכי מתאים למקרה שלך

    http://www.manning.com/nielsen/SampleChapter5.pdf

    תבדוק למשל אם זה מתאים לך

    CREATE TABLE [dbo].[arie_bus](
        [BusNum] [bigint] NOT NULL,
        [dt] [datetime] NOT NULL,
        [speed] [smallint] NULL
    )
    
    
    insert [dbo].[arie_bus] (BusNum,dt,speed)
    values
    (930,    '2015-04-13 07:22:58.000',    0 ),
    (930,    '2015-04-13 07:23:02.000',    0 ),
    (930,    '2015-04-13 07:23:34.000',    0 ),
    (930,    '2015-04-13 07:24:22.000',    0 ),
    (930,    '2015-04-13 07:25:02.000',    0 ),
    (930,    '2015-04-13 07:25:42.000',    0 ),
    (930,    '2015-04-13 07:25:50.000',    0 ),
    (930,    '2015-04-13 07:26:02.000',    17),
    (930,    '2015-04-13 07:26:12.000',    19),
    (930,    '2015-04-13 07:26:22.000',    0 ),
    (930,    '2015-04-13 07:26:26.000',    0 ),
    (930,    '2015-04-13 07:27:02.000',    0 ),
    (930,    '2015-04-13 07:27:10.000',    0 ),
    (930,    '2015-04-13 07:27:22.000',    12), 
    (930,    '2015-04-13 07:27:32.000',    14), 
    (930,    '2015-04-13 07:27:56.000',    11), 
    (930,    '2015-04-13 07:28:14.000',    0 ),
    (930,    '2015-04-13 07:28:22.000',    0 ),
    (930,    '2015-04-13 07:28:36.000',    0 ),
    (930,    '2015-04-13 07:28:58.000',    10), 
    (930,    '2015-04-13 07:29:02.000',    0 ),
    (930,    '2015-04-13 07:29:16.000',    10)
    GO
    
    ;with MyCTE as (
    	select *, RANK() over (partition by speed order by dt) RA, ROW_NUMBER() over (order by dt) RN
    	from [dbo].[arie_bus]
    )
    select BusNum,speed,min(dt) start ,max(dt) finish
    from MyCTE
    group by BusNum,(RN-RA),speed
    order by start


    signature   Ronen Ariely
     [Personal Site]    [Blog]    [Facebook]


    • נערך על-ידי pituachMVP, Editor יום שלישי 28 אפריל 2015 03:56
    • סומן כתשובה על-ידי אריה שטרן יום שלישי 28 אפריל 2015 12:32
    יום שלישי 28 אפריל 2015 02:15
    מנחה דיון
  • בוקר טוב אריה,

    אני מציע שתבחר דוגמה אחת ספציפית ותצרף לנו DDL+DML של הטבלאות הרלוונטיות כדי שנפתח דיון מעשי (בהתאם למבנה הטבלה הספציפי ולנתונים לדוגמה שתכניס לתוכה)


    signature   Ronen Ariely
     [Personal Site]    [Blog]    [Facebook]

    • הוצע כתשובה על-ידי Eran Sharvit יום ראשון 26 אפריל 2015 10:36
    • סומן כתשובה על-ידי Eran Sharvit יום שני 27 אפריל 2015 10:48
    יום חמישי 23 אפריל 2015 05:46
    מנחה דיון

כל התגובות

  • בוקר טוב אריה,

    אני מציע שתבחר דוגמה אחת ספציפית ותצרף לנו DDL+DML של הטבלאות הרלוונטיות כדי שנפתח דיון מעשי (בהתאם למבנה הטבלה הספציפי ולנתונים לדוגמה שתכניס לתוכה)


    signature   Ronen Ariely
     [Personal Site]    [Blog]    [Facebook]

    • הוצע כתשובה על-ידי Eran Sharvit יום ראשון 26 אפריל 2015 10:36
    • סומן כתשובה על-ידי Eran Sharvit יום שני 27 אפריל 2015 10:48
    יום חמישי 23 אפריל 2015 05:46
    מנחה דיון
  • ושוב שלום


    מצורף בזה דוגמא לבנית טבלה

    CREATE TABLE [dbo].[arie_bus](
        [BusNum] [bigint] NOT NULL,
        [dt] [datetime] NOT NULL,
        [speed] [smallint] NULL
    )

    כאשר SPEED= 0 האוטובוס עומד.

    דוגמא של שורות בטבלה.

    BusNum    dt                                     speed
    930    2015-04-13 07:22:58.000    0
    930    2015-04-13 07:23:02.000    0
    930    2015-04-13 07:23:34.000    0
    930    2015-04-13 07:24:22.000    0
    930    2015-04-13 07:25:02.000    0
    930    2015-04-13 07:25:42.000    0
    930    2015-04-13 07:25:50.000    0
    930    2015-04-13 07:26:02.000    17
    930    2015-04-13 07:26:12.000    19
    930    2015-04-13 07:26:22.000    0
    930    2015-04-13 07:26:26.000    0
    930    2015-04-13 07:27:02.000    0
    930    2015-04-13 07:27:10.000    0
    930    2015-04-13 07:27:22.000    12
    930    2015-04-13 07:27:32.000    14
    930    2015-04-13 07:27:56.000    11
    930    2015-04-13 07:28:14.000    0
    930    2015-04-13 07:28:22.000    0
    930    2015-04-13 07:28:36.000    0
    930    2015-04-13 07:28:58.000    10
    930    2015-04-13 07:29:02.000    0
    930    2015-04-13 07:29:16.000    10

    המטרה היא לזהות רצפים של עמידות לפרק זמן מסויים, לדוגמא 10 דקות.

    בתודה מראש


    אריה שטרן

    יום שני 27 אפריל 2015 11:49
  • אהלן אריה

    בקישור הבא יש מדריך להורדה מלא בנושא שאתה מחפש. הנושא נקרא בשפת העמך gaps and islands
    הכוונה לכך שיש לך נתונים עם חורים

    תבדוק אם הקישור עוזר לך ותצבחר את הפםתרון שהכי מתאים למקרה שלך

    http://www.manning.com/nielsen/SampleChapter5.pdf

    תבדוק למשל אם זה מתאים לך

    CREATE TABLE [dbo].[arie_bus](
        [BusNum] [bigint] NOT NULL,
        [dt] [datetime] NOT NULL,
        [speed] [smallint] NULL
    )
    
    
    insert [dbo].[arie_bus] (BusNum,dt,speed)
    values
    (930,    '2015-04-13 07:22:58.000',    0 ),
    (930,    '2015-04-13 07:23:02.000',    0 ),
    (930,    '2015-04-13 07:23:34.000',    0 ),
    (930,    '2015-04-13 07:24:22.000',    0 ),
    (930,    '2015-04-13 07:25:02.000',    0 ),
    (930,    '2015-04-13 07:25:42.000',    0 ),
    (930,    '2015-04-13 07:25:50.000',    0 ),
    (930,    '2015-04-13 07:26:02.000',    17),
    (930,    '2015-04-13 07:26:12.000',    19),
    (930,    '2015-04-13 07:26:22.000',    0 ),
    (930,    '2015-04-13 07:26:26.000',    0 ),
    (930,    '2015-04-13 07:27:02.000',    0 ),
    (930,    '2015-04-13 07:27:10.000',    0 ),
    (930,    '2015-04-13 07:27:22.000',    12), 
    (930,    '2015-04-13 07:27:32.000',    14), 
    (930,    '2015-04-13 07:27:56.000',    11), 
    (930,    '2015-04-13 07:28:14.000',    0 ),
    (930,    '2015-04-13 07:28:22.000',    0 ),
    (930,    '2015-04-13 07:28:36.000',    0 ),
    (930,    '2015-04-13 07:28:58.000',    10), 
    (930,    '2015-04-13 07:29:02.000',    0 ),
    (930,    '2015-04-13 07:29:16.000',    10)
    GO
    
    ;with MyCTE as (
    	select *, RANK() over (partition by speed order by dt) RA, ROW_NUMBER() over (order by dt) RN
    	from [dbo].[arie_bus]
    )
    select BusNum,speed,min(dt) start ,max(dt) finish
    from MyCTE
    group by BusNum,(RN-RA),speed
    order by start


    signature   Ronen Ariely
     [Personal Site]    [Blog]    [Facebook]


    • נערך על-ידי pituachMVP, Editor יום שלישי 28 אפריל 2015 03:56
    • סומן כתשובה על-ידי אריה שטרן יום שלישי 28 אפריל 2015 12:32
    יום שלישי 28 אפריל 2015 02:15
    מנחה דיון
  • תודה רבה !

    התשובה עזרה מאוד


    אריה שטרן

    יום שלישי 28 אפריל 2015 12:32
  • אני שמח לשמוע :-)

    signature   Ronen Ariely
     [Personal Site]    [Blog]    [Facebook]

    יום שישי 01 מאי 2015 21:32
    מנחה דיון