Fick väldigt bra hjälp igår med lite SQL trassel men nu har dte hackat sig..
Koden i sig är inte specielll men jag vill igentligen bara få fram den rad som innehåller lägsta värdet för "prod_week".
Använder följande kod..
SELECT MIN(oe.prod_week), oe.prodplan_id FROM pd_mounting_details as md LEFT OUTER JOIN pd_order_eco AS oe ON md.order_data = oe.id
LEFT OUTER JOIN pd_article AS a ON md.article = a.id
where oe.status=4 AND (md.starttime ='' or md.starttime is null) AND (a.production_group = 4) AND (NOT (oe.amount = 0)) group by oe.prodplan_id
Här vill jag alltså få fram den veckan med lägst nummer men jag vill också få med det id som gäller den vecka.. Jag troddde ovan kod skulle fixa det men jag får istället två rader med olika veckor..
ovan fråga om jag inte använder MIN eller GROUP BY resulterar i flera rader där värdet för vecka är antingen 1126 eller 1127, även prodplan_id'et har då olika id för varje vecka..
Jag förstår inte hur jag kan få ut två rader där ena raden ger vecka=1126 och prodplan_id=10
samtidigt som jag får en en rad med vecka=1127 och prodplan_id =11..
Jag använder ju MIN(prod_week) då borde jag väll få den som har vecka =1126 ??
Använder jag denna så får jag en rad med den lägsta "prod_week"
SELECT MIN(oe.prod_week) FROM pd_mounting_details as md LEFT OUTER JOIN pd_order_eco AS oe ON md.order_data = oe.id
LEFT OUTER JOIN pd_article AS a ON md.article = a.id
where oe.status=4 AND (md.starttime ='' or md.starttime is null) AND (a.production_group = 4) AND (NOT (oe.amount = 0))
Nu vill jag ju bara få med "prodplan_id" för den raden?
Här kommer en lösning om någon anna skulle behöva någon gång.
SELECT top 1 MIN(oe.prod_week) as te, oe.prodplan_id FROM pd_mounting_details as md
LEFT OUTER JOIN pd_order_eco AS oe ON md.order_data = oe.id
LEFT OUTER JOIN pd_article AS a ON md.article = a.id where oe.status=4 AND (md.starttime ='' or md.starttime is null) AND
(a.production_group = 4) AND (NOT oe.amount = 0) group by oe.prodplan_id order by te
alttså använda TOP 1 och ORDER BY...
Denna fråga returnerar ju två kolumner, te och oe.prodplan_id.. Någon som vet hur man kan få ut endast oe.prodplan_id?
Provade att lägga en SELECT runt om så här.
SELECT prodplan FROM (SELECT top 1 MIN(oe.prod_week) as te, oe.prodplan_id FROM pd_mounting_details as md
LEFT OUTER JOIN pd_order_eco AS oe ON md.order_data = oe.id
LEFT OUTER JOIN pd_article AS a ON md.article = a.id where oe.status=4 AND (md.starttime ='' or md.starttime is null) AND
(a.production_group = 4) AND (NOT oe.amount = 0) group by oe.prodplan_id order by te)
Men det ger så är det det n som förstår varför hade det varit kanon?
SELECT TOP 1 oe.prod_week,oe.prodplan_id FROM pd_mounting_details as md LEFT OUTER JOIN pd_order_eco AS oe ON md.order_data = oe.id
LEFT OUTER JOIN pd_article AS a ON md.article = a.id
where oe.status=4 AND (md.starttime ='' or md.starttime is null) AND (a.production_group = 4) AND (NOT (oe.amount = 0)) ORDER BY oe.prod_week
Grejen är att det funkar inte om man ska nästla den frågan i en yttre fråga, då denna fråga returnerar båda kolumnerna, te och oe.prodplan_id..
Kom precis på att om man sätter ett namn på frågesatsen så fungerar det.. så det får bli så här.
SELECT prodplan FROM (SELECT top 1 MIN(oe.prod_week) as te, oe.prodplan_id FROM pd_mounting_details as md
LEFT OUTER JOIN pd_order_eco AS oe ON md.order_data = oe.id
LEFT OUTER JOIN pd_article AS a ON md.article = a.id where oe.status=4 AND (md.starttime ='' or md.starttime is null) AND
(a.production_group = 4) AND (NOT oe.amount = 0) group by oe.prodplan_id order by te) AS te
143 ms totalt · 3 externa anrop · v20260731065814-full.b746b907