שאלה ב sql

cd123

משתמש פעיל
D I G I T A L
אני רוצה לשלוף מטבלה נתונים לפי פרמטרים מסויימים מקובצים ב group by
ולפי זה לשלוף נתון מטבלה אחרת כשהתוצאה של min בטבלה הראשית שווה לשדה בטבלה האחרת.
הבעיה היא שכאשר יש 2 רשומות שהן שוות לmin אז אני רוצה לבדוק שדה נוסף של אותן שתי רשומות ולבחור מבינו את המינימום ואם גם שם זהה לא לשלוף כלום, איך הכי מומלץ לעשות את זה?
למישהו יש דוגמא?

תודה רבה
 

חנה4

משתמש סופר מקצוען
D I G I T A L
אולי משהו בסגנון הזה?
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))
 

חנה4

משתמש סופר מקצוען
D I G I T A L
יוצא משובש בגלל האנגלית
הרעיון של גרופ בתוך גרופ, שעל הגרופ החיצוני יש את השורה המודגשת.
 

cd123

משתמש פעיל
D I G I T A L
הבעיה שלי היא שהשתמשתי ב having לספור תוצאות שחזרו אם הן שוות למספר מסויים
 

cd123

משתמש פעיל
D I G I T A L
השמות של השדות לא משהו (רשם אותם מישהו אחר) אז מקווה שאפשר להבין משהו

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 ))))
 

cd123

משתמש פעיל
D I G I T A L
אם נניח יש מינימום בשדה הנוסף שאני יבדוק אז אפשר לעשות ככה:

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
 

דבורה ק

משתמש פעיל
אין לי זמן כרגע לבדוק אם זה מתאים לך, אבל ניסית להשתמש
min(xxx) over (partition by yyy) ?
 

אולי מעניין אותך גם...

הפרק היומי

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


תהילים פרק קכב

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

לוח מודעות

למעלה