select - dziwny, nie mam pomysłu

0

witam, na wstępie jako nowy pozdrawiam wszystkich ciepło ;)
piszę z prośbą o podpowiedź,mój problem jest taki :
tabela
typ;qty;dec


aa;12;null
aa;14;null
aa;15;ok
aa;17;ok

bb;2;null
bb;4;null
bb;6;null
bb;8;null
bb;10;ok
bb;12;ok
bb;13;ok

cc;200;null
cc;202;ok
cc;203;ok

jak wybrać rekordy gdy w dec pierwszy raz wystąpi OK dla danego typ: powinno być jak niżej
aa;15;ok
bb;10;ok
cc;202;ok

kombinuję już sporo czasu i nie wychozi ;(
dzięki za podpowiedzi i pozdrawiam
roberth

0

Czekaj bo chyba nie do końca rozumiem, ale myślę że można by było zrobić z distinctem

select distinct typ, qty, dec 
from tabela 
where dec ='ok'  
0
roberth napisał(a):

witam, na wstępie jako nowy pozdrawiam wszystkich ciepło ;)
piszę z prośbą o podpowiedź,mój problem jest taki :
tabela
typ;qty;dec


aa;12;null
aa;14;null
aa;15;ok
aa;17;ok

bb;2;null
bb;4;null
bb;6;null
bb;8;null
bb;10;ok
bb;12;ok
bb;13;ok

cc;200;null
cc;202;ok
cc;203;ok

jak wybrać rekordy gdy w dec pierwszy raz wystąpi OK dla danego typ: powinno być jak niżej
aa;15;ok
bb;10;ok
cc;202;ok

kombinuję już sporo czasu i nie wychozi ;(
dzięki za podpowiedzi i pozdrawiam
roberth

select dec from tabela order by dec DESC

nie wiem czy dobrze.

0
SELECT typ, 
       qty, 
       dec 
FROM   (SELECT typ, 
               qty, 
               dec, 
               Row_number() OVER (partition BY typ ORDER BY qty) r 
        FROM   tabela 
        WHERE  dec = 'ok') dt 
WHERE  r = 1 

lub, jeżeli qty może identyfikować wiersz

SELECT t.* 
FROM   tabela t 
       INNER JOIN (SELECT typ, 
                          Min(qty) q 
                   FROM   tabela 
                   WHERE  dc = 'ok' 
                   GROUP  BY typ) g 
               ON t.qty = g.q 
                  AND t.typ = g.typ ```
0

włożyłem to tu:
http://sqlfiddle.com/#!6/e1786/4
ale oba selecty nie dały oczekiwanego ;(

0

Pytanie brzmi czy dane sa posortowane po Qty ? W Twoim przykładzie wygląda ze tak ale nie napisałeś tego więc nie wiadomo czy to nie przypadek. Zakładając że nie to mozna zrobić to np tak:

SELECT typ, qty, dec
FROM Tabela1 T1

INNER JOIN

(SELECT typ, Min(Qty) QtyOK
FROM Tabel1 
WHERE dec = 'ok' 
GROUP BY typ) T2

ON 

T1.typ = T2.typ and T1.qty = t2.QtyOK

Edit: Damn @Panczo jak zykle nie śpi ;) ... to late :(

0

Panczo - Twoje sprawdzam ;)

0

Dzięki Panczo ;)
SELECT type,
qty,
decis
FROM (SELECT type,
qty,
decis,
ROW_NUMBER() OVER (partition BY type ORDER BY qty) r
FROM ttable
WHERE decis = 'ok') dt
WHERE r = 1
zgrabniutko ;)

0

Oczywiście pozostałym również serdeczne dzięki za zainteresowanie ;)

pozdrawiam
roberth

1 użytkowników online, w tym zalogowanych: 0, gości: 1