Pobieranie najnowszej wersji rekordów ze wspólnym atrybutem

1

Cześć, mam tabelę z danymi i chciałbym pobrać z niej ID dla najnowszego (time) elementu (elementID) ale w taki sposób, żeby każdy elementID wystąpił tylko jeden raz, w najnowszej wersji, zatem dla poniższej tabeli powinno zwrócić wyniki od ID 3 i 5. Próbowałem z DISTINCT, ale nie bardzo wiem jak się za to zabrać.

+----------+--------------+------------+
|       id | elementID    |       time |
+----------+--------------+------------+
|        1 |            1 | 1687166175 |
|        2 |            1 | 1687166176 |
|        3 |            1 | 1687166177 |
|        4 |            2 | 1687166178 |
|        5 |            2 | 1687166179 |
+----------+--------------+------------+
1

spróbuj grupowania po elementID a potem element maksymalny time w ramach grupy

coś w rodzaju:

group by elementID
having time = max(time)
0

@KamilAdam: niestety zapytanie:

SELECT * FROM strony group by elementID having time = max(time)

Zwraca pusty wynik :(

3
catshy napisał(a):

@KamilAdam: niestety zapytanie:

SELECT * FROM strony group by elementID having time = max(time)

Zwraca pusty wynik :(

Po po pierwsze jak grupujesz to musisz podać w selekt kolumny po których grupujesz.

select * from (select *, Row_Number() over(partition by elementID order by time desc) as RowNumber from strony) where RowNumber = 1 
0

W jednym z projektów użyliśmy pola datetime "nieaktualny"
pole null - aktualny
wypełnione datetime - czas stania się archiwalnym.

Mam świadmosć, że to inny projekt bazy i nieco inna koncepcja.

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