Wybranie najnowszego statusu

Wybranie najnowszego statusu
fasadin
  • Rejestracja: dni
  • Ostatnio: dni
  • Postów: 4883
0

Teraz mam dwa zapytania
jednym pobieram ID

Kopiuj
SELECT ID FROM configtree WHERE TYPE = 'STATE'

drugim znajduje wszyskie wpisy o tym ID, sortuje je zeby pokazywal mi od najnowszego i wybieram sobie wartosc state.

Kopiuj
SELECT TOP 1 StateValue FROM State WHERE stateid = {1} ORDER BY Datetime desc

gdzie {1} jest wynikiem z pierwszego zapytania (wiec wywoluje to zapytanie kilkaset razy... co nie jest fajne)

Da sie to zrobic w jednym zapytaniu? Ja sam zatrzymalem sie na czyms takim

Kopiuj
 SELECT config.ID, state.StateValue FROM CONFIGTREE config Join STATE state on config.ID = state.StateID WHERE config.TYPE = 'STATE' 

ale to mi nie sortuje daty i nie daje mi unikalnych wartosci

katelx
  • Rejestracja: dni
  • Ostatnio: dni
  • Lokalizacja: Hong Kong
1

moze zrob group by config.id a po select daj cos w stylu max(datetime+statevalue) (nie wiem jakie tam typy danych masz), sparsuj jesli trzeba (tzn utnij ta date z poczatku)

fasadin
  • Rejestracja: dni
  • Ostatnio: dni
  • Postów: 4883
0

jak robie group by dostaje

Kopiuj
Msg 8120, Level 16, State 1, Line 1
Column 'STATE.StateValue' is invalid in the select list because it is not contained in either an aggregate function or the GROUP BY clause. 

EDIT. Moge tez tak zrobic, ale wtedy mam duplikaty na config.Id (czy na stateID jako ze to jest to samo)

Kopiuj
SELECT config.ID, state.StateValue 
  FROM PEARLGTL..CONFIGTREE config 
    right Join PEARLGTL..STATE state ON config.ID = state.StateID 
  WHERE config.TYPE = 'STATE' 
  order BY state.DateTime
katelx
  • Rejestracja: dni
  • Ostatnio: dni
  • Lokalizacja: Hong Kong
1

bo musisz zrobic cos w stylu select config.id, max(data+string) from blablabla group by config.id a nie ze dowolne kolumny tam dasz po select ;)

fasadin
  • Rejestracja: dni
  • Ostatnio: dni
  • Postów: 4883
0

Potrzebuje state.StateValue a w tym zapytaniu go nie ma ;)

katelx
  • Rejestracja: dni
  • Ostatnio: dni
  • Lokalizacja: Hong Kong
2

no to przeciez masz statevalue w max(data+statevalue)

FI
  • Rejestracja: dni
  • Ostatnio: dni
  • Postów: 88
0

Możesz też użyć jednej z funkcji rankingowych.

FI
  • Rejestracja: dni
  • Ostatnio: dni
  • Postów: 88
0

Poszukaj w google, daje tylko wskazówkę. RANK, DENSE_RANK, ROW_NUMBER itp

Zarejestruj się i dołącz do największej społeczności programistów w Polsce.

Otrzymaj wsparcie, dziel się wiedzą i rozwijaj swoje umiejętności z najlepszymi.