GraphDB ב-SQL Server 2017

יום שלישי, יולי 18, 2017

גרסת 2017 שבשעת כתיבת שורות אלו היא עדיין גרסת CTP (מה שנקרא בדרך כלל – גרסת בטה), תומכת ב-GraphDB, וב-SQL Azure הטכנולוגיה כבר זמינה לשימוש. טכנולוגיה זו שכוללת אובייקטים חדשים מחד, והרחבה של שפת TSQL עבורם; נועדה לטפל ברשתות, או ליתר דיוק – במידע לגבי רשתות. מבוא קצרצר לתורת הרשתות זו רשת (Graph): אוסף של קודקודים (Nodes) וקשתות (Edges), כשכל קשת מחברת בין שני קודקודים.הרשת יכולה לייצג אנשים וההיכרויות בינם, תחנות רכבת המקושרות בינן, קשרים בין אטומים במולקולות, ועוד.במקרה זה הקשתות הן סימטריות: המרחק מתחנת האוניברסיטה לתחנת הרצליה היא כמרחק מתחנת הרצליה לתחנת האוניברסיטה, ואם אני חבר...
אין תגובות

היכן הפסיק ה-n-י? (מציאת מופע של תת מחרוזת): גרסת ה-String_Split

יום חמישי, אפריל 7, 2016

לפני למעלה מ-6 שנים, בראשית דרכי כבלוגר, פרסמתי את הפוסט היכן הפסיק ה-n-י? (מציאת מופע של תת מחרוזת):נתונה טבלה ובה עמודת Subjects עם מקצועות שונים שכל סטודנט לומד - Create Table T_Students (Name VarChar(50), Subjects VarChar(Max));GoInsert Into T_StudentsValues ('Ana','Geography,Literature'), ('Beni','Chemistry,Economics,History,Sociology'), ('Carmel',''), ('Dana','Literature,Economics,Philosophy,Sociology'), ('Eli','Zoology,Economics,Geography,History,Science'), ('Felicia','Medicine');Go ויש לשלוף את המקצוע הרביעי (אם יש..) של כל סטודנט.הפתרון שאז מצאתי, בלוגר צעיר ונרגש שחרד...

יצירת כל תתי הקבוצות לקבוצה נתונה

יום שלישי, פברואר 16, 2016

הפוסט הזה נכתב בעקבות בעייה אמיתית, אבל כדי לפשט ולהקל אתמקד בעניין העקרוני ולא המעשי.נתונה קבוצת המספרים 1..N, ואנחנו מעוניינים לקבל את כל תתי הקבוצות שלה.ל-N מספרים יש (2 בחזקת N) תתי קבוצות. למשל: לקבוצה {1,2} יש 2^2=4 תתי קבוצות: {},{1},{2},{1,2}, והן כוללות גם את הקבוצה הריקה {} וגם את הקבוצה המקורית כולה – הקבוצה האוניברסלית - {1,2}.למה (2 בחזקת N) תתי קבוצות? כי כל איבר יכול להיות בקבוצה ויכול לא להיות (=2 אפשרויות), ולכן יש לכפול את 2 בעצמו כמספר האיברים הקבוצה.אציג להלן 2 דרכים שונות להתמודד עם המשימה.הדרך הראשונה מחוללת את (2 בחזקת N) המספרים, וליצוג הבינארי...
אין תגובות

הקצאת משאבים למשימות

יום שישי, נובמבר 20, 2015

אתגר שצץ לו מרחבי הרשת: יש משימות שלכל אחת מועד התחלה ומועד סיום, למשל – טיולים מאורגנים שנמשכים מספר ימים, מי יותר ומי פחות, וכל אחד מתחיל במועד אחר. בנוסף יש אוטובוסים שצריך להקצות לאותן משימות: את אוטובוס 1 נקצה למשימה הראשונה, למשימה 2 נקצה את אוטובוס 1 רק אם הוא סיים בינתיים את משימתו, ולא – את אוטובוס 2 וכך הלאה. לכל משימה נחפש את האוטובוס הפנוי הראשון ואותו נקצה.ברור שאם כל המשימות קורות בו זמנית נצטרך אוטובוסים כמספר המשימות ואז האתגר לא יהיה מעניין, אך בהנחה שחלק מסתיימות בטרם האחרות מתחילות – מספר האוטובוסים שנצטרך לכולן הוא...
אין תגובות

חידת SQL ולצידה אתגר מתימטי

יום חמישי, פברואר 26, 2015

נתחיל מהחידה שהיא רק המתאבן לאתגר:נתונה טבלה בשם MyTbl ובה עמודת ID מסוג Int.נריץ את השליפה הבאה: Select *From MyTbl T1Inner Join MyTbl T2 On T1.ID=T2.ID; כמה שורות יחזרו? בשלב הזה צריך לעצום את העיניים כדי לא לקלקל את האתגר ולנסות לבד לחשוב,ומי שמתעצל- יכול להציץ בתשובה ולשכנע את עצמו שהוא היה מגיע לזה לבד..בכל מקרה- מכיוון שלא נאמר מה טיבה של אותה עמודת ID אזי יכולים להיות בה ערכי Null, ערכים שאינם יחודיים וכו’;ומספר השורות החוזרות ינוע בין אפס שורות במקרה שכל העמודה היא Nulls (ואז אין אף...
אין תגובות

חיפוש רצף מילים עוקבות בטבלה

יום שבת, ספטמבר 6, 2014

לשולחן המערכת הגיעה שאלה כדלקמן: טקסט הוכנס לטבלה כך שכל מילה שמורה בשורה חדשה (למה? ככה!), ורוצים לחפש אם מופיע בו משפט מסויים (במקרה זה- I love you). לחפש את כל אחת מהמילים זו משימה פשוטה, אך את כולן ובזו אחר זו – קצת מסובך.נתחיל מהנתונים- נניח שנתונים משפטי האהבה הנלבבים שלהן: I love you tooI live in IsraelI love cakesI love youI love me and youthe opposite of I hate is I loveyou are my friendI call youwe love you עשיתי לעצמי חיים קלים: בלי סימני פיסוק, וכל מיני תווים שצריך להתעלם מהם (למשל- מה היה קורה לו...
אין תגובות

מדידת פופולריות ברשת חברתית מכוונת (הירארכית)

יום שבת, יולי 5, 2014

רשתות חברתיות כדוגמת פייסבוק או לינקדאין מאופיינות ברשת של חברויות בה לכל משתתף יש חברים, לכל אחד מהם חברים משלו וכך הלאה.מדובר ברשת ולא בעץ מכיוון שיתכנו בה מעגלים סגורים בהם ראובן, שמעון ולוי חברים זה של זה (אחת מתכונותיו היסודיות של העץ – שאין בו מעגלים), ובוודאי שאין מדובר בעץ היררכי בו מתקיימים יחסי אב-בן מכיוון שכל חברות באתרים הנ”ל היא סימטרית: אם ראובן חבר של שמעון, אזי שמעון גם חבר של ראובן; מה שלא יכול לקרות בעץ היררכי (אם ראובן המנהל של שמעון אזי ברור ששמעון אינו יכול להיות המנהל של ראובן).מהכתוב ניתן להבין שיתכן עץ שאינו...
תגובה אחת

דוחות כספיים במערכת הנהלת חשבונות היררכית

יום שישי, אוגוסט 16, 2013

דוחות חשבונאיים הם היררכיים בדרך כלל. למשל דוח רווח והפסד שאמור להציג את ההכנסות וההוצאות של הארגון ולחשב את הרווח כהפרש בין שניהם כולל פירוט של כל אחד מהשניים למספר סעיפים. למשל- ההוצאות מתחלקות כך: 1. הוצאות תפעול (ישירות) 2. הוצאות שיווק, הנהלה וכלליות 3. הוצאות מימון ואחרות כל אחד מהסעיפים מתחלק לסעיפי משנה, אלה לתת סעיפי משנה וכך הלאה. בדוחות עצמם, שמסכמים המון תנועות יומיומיות במהלך השנה, מספר ההיררכיות יהיה 3-5 לכל היותר כדי שהדוח יהיה "קריא" ויתמקד בעיקר, אך במערכת עצמה העומק יכול...
אין תגובות

CTE רקורסיבי ופונקציות החלון

יום שני, יולי 22, 2013

CTE רקורסיבי הוא הכלי החביב עלי ביותר מתוך כל מה ש-SQL Server וחבורתו מציעים לנו: לא High Availability, לא File Stream, לא Variable Tables, ואפילו לא Service Broker. יתכן שאם תופיע מודעת דרושים בה נדרש מומחה ל-CTE רקורסיבי שיכתוב רקורסיות מהבוקר עד הערב – אני אתקשר ואשאל בנימוס כמה הם רוצים שאשלם להם כל חודש תמורת הזכות.. למרבה הצער השימוש בהם אינו נפוץ, הם מתאימים לבעיות מאוד ספציפיות, ועיקר שמושן הוא באתגרים טכניים שאני מאוד מחבב; אך כמו כל מיני חידות הגיון בסגנון של איך להעביר זאב, כבשה ואבטיח בסירה מבלי שהכבשה תתנגוס באבטיח ומבלי שהזאב...
אין תגובות

בכמה דרכים ניתן לשלם על הנסיעה במונית השירות?

יום רביעי, יולי 10, 2013

בשלוש דרכים אישה נקנית – כך פסקו חז"ל, אך מה בדבר נסיעה במונית שירות? מדי יום אני נוסע הלוך ושוב, מחיר הנסיעה הסטנדרטי הוא 6 ₪, חלק מהנוסעים משלמים בשני מטבעות – של 5 ₪ ושל 1 ₪, אחרים בשישה מטבעות של 1 ₪, ויש כמובן עוד אפשרויות. ננסה למצוא את כולן: Declare @N Int=600; With Mt As (Select 10 V Union All Select 50 V Union All Select 100 V Union All ...
אין תגובות