Wybranie najnowszego statusu

0

Teraz mam dwa zapytania
jednym pobieram ID

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.

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

 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

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)

0

jak robie group by dostaje

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)

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

0

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

2

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

0

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

0

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

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