Wybierz rekordy na podstawie priorytetu kolumny

Przede wszystkim tytuł tego pytania jest okropny, ale nie znalazłem lepszego sposobu na opisanie mojego problemu.

Prawdopodobnie jest to bardzo łatwy sposób, ale nie mogłem tego zrozumieć. Jest to bardzo podobne doto pytanie, ale pracuję na sqlite3 (iOS), więc podejrzewam, że moje opcje są znacznie bardziej ograniczone.

Mam tabelę z rekordami produktów. Wszystkie rekordy mają identyfikator (uwaga: nie mówię o identyfikatorze wiersza, ale raczej o numerze identyfikacyjnym unikalnym dla każdego produktu). Niektóre produkty mogą mieć dwa wpisy w tabeli (oba z tym samym identyfikatorem). Jedyną różnicą byłaby specjalna kolumna (powiedzmy, że kolumna KOLOR może być CZERWONA lub ZIELONA).

Chcę utworzyć listę unikalnych produktów w oparciu o wartość KOLOR, z priorytetem ZIELONY, jeśli istnieją zarówno ZIELONE, jak i CZERWONE rekordy dla tego samego produktu.

Krótko mówiąc, jeśli mam następujący przypadek:

id       PRODUCT ID    COLOUR
1        1001          GREEN
2        1002          GREEN
3        1002          RED
4        1003          RED

Chciałbym, aby mój SELECT zwrócił wiersze 1, 2 i 4. Jak mogę to osiągnąć?

Moim obecnym podejściem jest posiadanie oddzielnych tabel i ręczne łączenie, ale oczywiście jest to bardzo zły pomysł ..

Uwaga: Próbowałem użyć tego samego podejściatutaj:

SELECT * 
  FROM xx
 WHERE f_COLOUR = "GREEN"
UNION ALL
SELECT * 
  FROM xx 
 WHERE id not in (SELECT distinct id 
                    FROM xx 
                   WHERE f_COLOUR = "GREEN");

Ale otrzymuję wynik rzędu 1,2,3,4 zamiast 1,2,4. czego mi brakuje?

Edytować: Jeszcze jedno pytanie: jak można to zrobić, aby pracować z podzbiorem rekordów, tj. jeśli zamiast całej tabeli chciałem filtrować niektóre rekordy?

Na przykład, gdybym miał coś takiego jak SELECT * FROM tabela WHERE productID LIKE "1%" ... jak mogę odzyskać każdy unikalny produkt, ale nadal respektując priorytet koloru (ZIELONY> CZERWONY)?

questionAnswers(4)

yourAnswerToTheQuestion