סינון רשומות בשאילתא על סמך שאר הרשומות באותה שאילתא
-
שלום,
אני בונה מערכת קטנה בעזרת Microsoft Access ואשמח לעזרתכם.
אני מעוניין לסנן רשומות מסוימות בשאילתא שבניתי על, סמך הנתונים של אותה שאילתא עצמה.
אציג דוגמא פשוטה יותר להמחשה.
בתמונה המצ"ב אני מעוניין להסתיר חלופות נחותות (לעבור מהמצב השמאלי לימני).
חלופה נחותה היא כזו ש:
קיימת חלופה כלשהי אחרת עם עלות שווה או נמוכה משלה וגם עם תועלת גבוהה או שווה לתועלת שלה.
לכן למשל חלופה א' לא תופיע, מכיוון שחלופה ה' הינה בעלת אותה רמת תועלת ועולה פחות.
ולכן חלופה ד' לא תופיע כי עולה יותר מחלופות א או ה ומועילה פחות מהם..
כמו כן במקרה של חלופות עם נתונים זהים יש להציג רק אחת מהם (ולא בעזרת הסרת כפילויות סטנדרטית מכיוון שבטבלה האמיתית זה לא ממש זהה).
לכן חלופה ז' תהיה מוסתרת גם כן.
אודה לעזרתכם בכתיבת קוד SQL שייתן מענה ו/או בהמלצה על פונקציות שניתן להשתמש בהם לבעיות מסיגנון זה.
תודה רבה!!פורסם במקור בפורום CODE613 ב05/07/2016 20:12 (+03:00)
-
פקודות EXCEPT ו INTERSECT נותנות מענה פשטני לבעיות מסוג זה וגם DISTINCT במקרה של סינון כפילויות פשוט.
בבעיה מעט יותר מורכבת כמו שהצגת כאן דרוש Self Join ולסינון כפילויות ניתן לרתום את ה ROW NUMBER.אני מביא פה פתרון עובד לבעיה הספציפית שהעלית למרות שאני עייף מידי לחשוב אם זה באמת הפתרון הראוי
DECLARE @A AS TABLE (ID INT IDENTITY(1,1), Price NUMERIC(19,6), Value NUMERIC(19,6), ROI AS Price / Value) INSERT INTO @A(Price,Value) VALUES(2,5),(8,6),(9,7) ,(7,4) ,(1,5),(10,10),(8,6) SELECT * FROM ( SELECT ROW_NUMBER() OVER (PARTITION BY A.Price, A.Value ORDER BY A.ID) AS Num, A.* FROM @A AS A LEFT JOIN @A AS B ON B.ID <> A.ID AND B.Price <= A.Price AND B.Value >= A.Value AND A.ROI <> B.ROI WHERE B.ID IS NULL ) AS X WHERE Num = 1
פורסם במקור בפורום CODE613 ב06/07/2016 00:00 (+03:00)
-
הפתרון של סופטס אני לא יודע עד כמה הוא אפשרי באקסס, זה בדרך כלל מאוד קשה לעשות שם דברים בסגנון הזה.
ספציפית לגבי הבעיה שלך, הייתי חותר ליצור עמודה מחושבת עם נוסחה, שתקבע דרגה עבור כל חלופה, וזה גם בשביל הקריאות של הקוד.
אבל משהו לא עקבי בנוסחה שלך, כי אתה מנסה לחשב יחס עלות תועלת, ולכאורה אמורה להיות חלופה אחת בלבד שהיא הכי יעילה, כלומר לפי איזה פרמטר אתה מקבץ את החלופות?פורסם במקור בפורום CODE613 ב06/07/2016 00:57 (+03:00)
-
מצורף כאן קובץ דוגמא לסינון החלופות הנחותות, מקווה שירדתי לסוף דעתך.
שים לב שזה לא מסנן חלופות שוות.פורסם במקור בפורום CODE613 ב06/07/2016 14:28 (+03:00)
-
תודה רבה לכולכם!
הקוד של סופטאכן להבנתי ולצערי לא מתאים לאקסס, למרות שהוא נראה טוב.
לגבי השאלה של ארכיטקט- המטרה היא לא להחליט בשבילך איזו חלופה לבחור, אלא לצמצם לך את מרחב הבחירה על ידי כך שמצמצמים לך אפשרויות שבטוח לא תבחר בהם. (לצורך העניין אם יש לך טבלה של רכבים מאותו סוג ונתון לך השנתון והמחיר- המערכת תצמצם לך רכב משנת 2006 שעולה יותר מרכב משנת 2007, אבל עדיין יישאר לך לבחור בין הרכב משנת 2007 לבין רכב משנת 2008 שעולה יותר ממנו- כי ההחלטה שלך האם להשקיע יותר בשביל מוצר יותר טוב).
הקובץ של בהצלחה נחמד מאוד, אבל אני מבין שהדוגמא שהבאתי פשטנית מידי מכדי שאצליח להקיש אותה על המקרה שלי, אז ברשותכם אכתוב את המקרה שלי ואודה מאוד מאוד למי שיוכל לעזור לי איתו:בניתי מודל ניסיוני שמטרתו לעזור כביכול לקופות חולים לאפשר ללקוחות המעוניינים במספר תורים שונים (2 או 3 לצורך העניין), לקבוע אותם בסמיכות. זאת אומרת שלקוח יוכל לקבוע בבת אחת שני פגישות עבור שני רופאים שונים בהתאם לקריטריונים סוגי רופאים, ימים אפשריים, מרחק מקסימלי מותר בין התורים וכן החלק מתאריך כלשהו שבחר (אנחנו עושים את זה במסגרת פרוייקט לימודי קהילתי וללא תמורה שהיא).
מה שעשינו עד עכשיו זה שאילתא שבה מופיעים כל הקומבינציות האפשריות של שילובי התורים הפנויים לרופאים המבוקשים, בעזרת סינון על פי הקריטריונים הבאים:
שני התורים באותו תאריך, התורים לא בזמן זהה, המרחק בניהם קטן מהמרחק שנקבע.
המיון הינו לפי: התור המוקדם מבין צמד התורים בסדר עולה ולאחר מכן לפי המרחק המינימלי בניהם בסדר עולה.
ואותו עיקרון על שילוב של שלוש תורים (וכן הלאה בעיקרון, רק שלא בניתי יותר מ-3).
עכשיו אני רוצים להוסיף שיפור שישדרג מאוד את ה"הצעה" של שילובי התורים והוא להוריד הצעות "נחותות".
זאת אומרת אם יש שני שילובים של תורים שאחד מהם מתחיל לפני השני (או איתו) וגם מסתיים אחריו (או איתו) אז הוא נחות ויש להשמיט אותו מהרשימה. כמו כן אני מעוניין כמובן שאם יש שני תורים לשני הרופאים המבוקשים בשעות 9,10 או 10,9 אז הוא יביא רק אחת מהתוצאות.אני מצרף תמונה בתגובה.
אני מקווה מאוד שהיא מובנת.
תודה רבה רבה!!!פורסם במקור בפורום CODE613 ב10/07/2016 22:55 (+03:00)
-
אני מצרף תמונה בתגובה.
עדיין מתקיים כאן "כי לא ראיתם כל תמונה" איפה התמונה??
אם זה פרוייקט קוד פתוח, כדאי שתעלה לכאן את הקוד, כי אם תמונה שווה יותר מאלף מילים, קוד מקור שווה יותר מאלף תמונות. ככה יש סיכוי טוב יותר לעזור לך. ואגב יש סיכוי טוב שבסופו של דבר לא תוכל לעשות זאת ב SQL טהור, תצטרך לשלב קוד VBA, שזה כבר אפס... כבר יותר אלגוריתמיקה ולא לגמרי דטה בייס.
פורסם במקור בפורום CODE613 ב10/07/2016 23:25 (+03:00)
-
-
ארכיטקט יקר,
הדטה שלי שוקל מעל 25MB מכיוון שהוא מלא בנתונים לצורך סימולציה.
האם תוכל לעזור לי בבקשה במייל?
<!-- e --><a href="mailto:tsurielharar@gmail.com">tsurielharar@gmail.com</a><!-- e -->
תודה רבה!!!!!פורסם במקור בפורום CODE613 ב13/07/2016 17:15 (+03:00)