שאלה ב sql

  • הוסף לסימניות
  • #1
אני רוצה לשלוף מטבלה נתונים לפי פרמטרים מסויימים מקובצים ב group by
ולפי זה לשלוף נתון מטבלה אחרת כשהתוצאה של min בטבלה הראשית שווה לשדה בטבלה האחרת.
הבעיה היא שכאשר יש 2 רשומות שהן שוות לmin אז אני רוצה לבדוק שדה נוסף של אותן שתי רשומות ולבחור מבינו את המינימום ואם גם שם זהה לא לשלוף כלום, איך הכי מומלץ לעשות את זה?
למישהו יש דוגמא?

תודה רבה
 
  • הוסף לסימניות
  • #2
אולי משהו בסגנון הזה?
select Field2
from Table2
inner join (
select min(MashbashCode) as minField1 ,Field1
from Table1
group by Field1) a on a.Field1=Table2.minField1
group by Field2
having count(*)=1 or(count(*)=2 and min(Field2)<> MAX(Field2))
 
  • הוסף לסימניות
  • #3
יוצא משובש בגלל האנגלית
הרעיון של גרופ בתוך גרופ, שעל הגרופ החיצוני יש את השורה המודגשת.
 
  • הוסף לסימניות
  • #4
הבעיה שלי היא שהשתמשתי ב having לספור תוצאות שחזרו אם הן שוות למספר מסויים
 
  • הוסף לסימניות
  • #5
תעלי את מה שכתבת
 
  • הוסף לסימניות
  • #6
השמות של השדות לא משהו (רשם אותם מישהו אחר) אז מקווה שאפשר להבין משהו

select dc.Mosah_code, dc.InsC_code, dc.dc_id, min(dc.DC_offer_after_discount) as win_offer,
(select sapak_code from DcnezekCloudAuction dcWinner
where dcWinner.DC_ID = dc.DC_ID and dcWinner.Mosah_code = dc.Mosah_code and dcWinner.InsC_code = dc.InsC_code
and dcWinner.DC_offer_after_discount = min(dc.DC_offer_after_discount)) as sapakWinner
from DcnezekCloudAuction dc
left join TbCompany on TbCompany.DC_Code = dc.InsC_code
where
dc.dc_id = 131
and dc.Mosah_code = 40000001
and dc.InsC_code = 400
group by dc.dc_id, dc.Mosah_code ,dc.InsC_code, TbCompany.Auction_runtime
having count(1) = ((select count(1) from DcnezekCloudAuction dc2
where dc2.InsC_code = dc.InsC_code
and dc2.Mosah_code = dc.Mosah_code
and dc2.DC_ID = dc.DC_ID
and (dc2.DC_offer_after_discount > 0
or (CAST(TbCompany.Auction_runtime AS DATETIME) + convert(DATETIME,max(dc.AuctionStartTime), 105) < GETDATE())
or dc2.Sapak_code = (select tc.ID from TbCompany tc where tc.DC_Code = dc.Mosah_code ))))
 
  • הוסף לסימניות
  • #7
אם נניח יש מינימום בשדה הנוסף שאני יבדוק אז אפשר לעשות ככה:

select dc.Mosah_code, dc.InsC_code, dc.dc_id, min(dc.DC_offer_after_discount) as win_offer,
(select top 1 sapak_code from DcnezekCloudAuction dcWinner
where dcWinner.DC_ID = dc.DC_ID and dcWinner.Mosah_code = dc.Mosah_code and dcWinner.InsC_code = dc.InsC_code
and dcWinner.DC_offer_after_discount = min(dc.DC_offer_after_discount) order by DC_offer_after_discount, DC_price_offer) as sapakWinner
from DcnezekCloudAuction dc
left join TbCompany on TbCompany.DC_Code = dc.InsC_code
where
dc.dc_id = 131
and dc.Mosah_code = 40000001
and dc.InsC_code = 400
group by dc.dc_id, dc.Mosah_code ,dc.InsC_code, TbCompany.Auction_runtime
having count(1) = ((select count(1) from DcnezekCloudAuction dc2
where dc2.InsC_code = dc.InsC_code
and dc2.Mosah_code = dc.Mosah_code
and dc2.DC_ID = dc.DC_ID
and (dc2.DC_offer_after_discount > 0
or (CAST(TbCompany.Auction_runtime AS DATETIME) + convert(DATETIME,max(dc.AuctionStartTime), 105) < GETDATE())
or dc2.Sapak_code = (select tc.ID from TbCompany tc where tc.DC_Code = dc.Mosah_code ))))

הבעיה היא מה אני עושה כשהשתיים באותו min בשתי השדות שאז אני רוצה להחזיר null
 
  • הוסף לסימניות
  • #8
אין לי זמן כרגע לבדוק אם זה מתאים לך, אבל ניסית להשתמש
min(xxx) over (partition by yyy) ?
 
  • הוסף לסימניות
  • #10
לא התאים לי לדוגמא :(
 

פרוגבוט

תוכן שיווקי
פרסומת

פוסטים חדשים שאולי לא קראת....

הצטרפות לניוזלטר

איזה כיף שהצטרפתם לניוזלטר שלנו!

מעכשיו, תהיו הראשונים לקבל את כל העדכונים, החדשות, ההפתעות בלעדיות, והתכנים הכי חמים שלנו בפרוג!

לוח מודעות

הפרק היומי

הפרק היומי! כל ערב פרק תהילים חדש. הצטרפו אלינו לקריאת תהילים משותפת!


תהילים פרק כה

אלְדָוִד אֵלֶיךָ יי נַפְשִׁי אֶשָּׂא:באֱלֹהַי בְּךָ בָטַחְתִּי אַל אֵבוֹשָׁה אַל יַעַלְצוּ אֹיְבַי לִי:גגַּם כָּל קוֶֹיךָ לֹא יֵבֹשׁוּ יֵבֹשׁוּ הַבּוֹגְדִים רֵיקָם:דדְּרָכֶיךָ יי הוֹדִיעֵנִי אֹרְחוֹתֶיךָ לַמְּדֵנִי:ההַדְרִיכֵנִי בַאֲמִתֶּךָ וְלַמְּדֵנִי כִּי אַתָּה אֱלֹהֵי יִשְׁעִי אוֹתְךָ קִוִּיתִי כָּל הַיּוֹם:וזְכֹר רַחֲמֶיךָ יי וַחֲסָדֶיךָ כִּי מֵעוֹלָם הֵמָּה:זחַטֹּאות נְעוּרַי וּפְשָׁעַי אַל תִּזְכֹּר כְּחַסְדְּךָ זְכָר לִי אַתָּה לְמַעַן טוּבְךָ יי:חטוֹב וְיָשָׁר יי עַל כֵּן יוֹרֶה חַטָּאִים בַּדָּרֶךְ:טיַדְרֵךְ עֲנָוִים בַּמִּשְׁפָּט וִילַמֵּד עֲנָוִים דַּרְכּוֹ:יכָּל אָרְחוֹת יי חֶסֶד וֶאֱמֶת לְנֹצְרֵי בְרִיתוֹ וְעֵדֹתָיו:יאלְמַעַן שִׁמְךָ יי וְסָלַחְתָּ לַעֲוֹנִי כִּי רַב הוּא:יבמִי זֶה הָאִישׁ יְרֵא יי יוֹרֶנּוּ בְּדֶרֶךְ יִבְחָר:יגנַפְשׁוֹ בְּטוֹב תָּלִין וְזַרְעוֹ יִירַשׁ אָרֶץ:ידסוֹד יי לִירֵאָיו וּבְרִיתוֹ לְהוֹדִיעָם:טועֵינַי תָּמִיד אֶל יי כִּי הוּא יוֹצִיא מֵרֶשֶׁת רַגְלָי:טזפְּנֵה אֵלַי וְחָנֵּנִי כִּי יָחִיד וְעָנִי אָנִי:יזצָרוֹת לְבָבִי הִרְחִיבוּ מִמְּצוּקוֹתַי הוֹצִיאֵנִי:יחרְאֵה עָנְיִי וַעֲמָלִי וְשָׂא לְכָל חַטֹּאותָי:יטרְאֵה אוֹיְבַי כִּי רָבּוּ וְשִׂנְאַת חָמָס שְׂנֵאוּנִי:כשָׁמְרָה נַפְשִׁי וְהַצִּילֵנִי אַל אֵבוֹשׁ כִּי חָסִיתִי בָךְ:כאתֹּם וָיֹשֶׁר יִצְּרוּנִי כִּי קִוִּיתִיךָ:כבפְּדֵה אֱלֹהִים אֶת יִשְׂרָאֵל מִכֹּל צָרוֹתָיו:
נקרא  2  פעמים
למעלה