Mam następujący problem. W bazie danych mam dwie tabele. W jednej mam ważne dane, a także w drugiej. Druga tabela zawiera m.in klucz obcy do pierwszej tabeli. Posiada również datę i czas dodania rekordu. Chciałbym połączyć obie tabele tak, by pola z drugiej tabeli zostały wzięte z rekordu najpóźniej dodanego. Jak można użyć group by do realizacji tego zagadnienia. Jeżeli użyję odpowiednio group by z order by, to czy osiągnę pożądany efekt?
PS: Wiem, że w mysql mogę użyć podzapytania, ale wolałbym uniknąć pisania własnych zapytań, gdyż zaciemniają kod.
PS2: Wiem, że mogę samemu sprawdzić zachowanie np. mysql, ale chciałbym, by wszystko było możliwie zgodne ze standardami, tzn. nie chcę wykorzystywać żadnych nieudokumentowanych właściwości.
Możesz opisać swój problem w bardziej zrozumiały sposób?
Np.:
Mam tabele A o strukturze xxx i tabelę B o strukturze yyy
Potrzebuje wyciągnąć następujące informację …
Na razie ma taki kawałek kodu ale nie jest to co oczekuje.(Opcjonalnie)
Przykład zazwyczaj jest bardziej wartościowy niż poprzednie 3 punkty: w tabeli A mam taki rekord: … W tabeli B takie rekordy: … . W wyniku chce otrzymać taki zbiór: …
Nie muszą być to dane “produkcyjne”, wystarczy że będą one jednoznacznie określały domenę problemu.
Chyba problem jest dobrze opisany, przynajmniej mnie się wydaję, że nie mam problemu go zrozumieć.
Masz tabelę A i B. Tabela B zawiera klucz do tabeli A przykładowo
fk data ... inne dane ...
1 24.05.14
1 25.05.14
2 23.05.14
2 24.05.14
I chodzi o to by połączyć te dane z danymi z tabeli A tak, aby wypisać te rekordy z najpóźniejszą datą. Czyli rekord 2 i 4 z przykładu.
Mówiąc jeszcze prościej z tej relacji 1 do wielu zrobić relację 1 do 1 przy czym ze strony wiele wybrać ze zbioru wierszy ten o najpóźniejszej dacie.
Jest to dość proste do zrobienia z podzapytaniem, ale bez, tak jak prosi OP, nie znam odpowiedzi
PS
To co ja bym zrobił w realnym środowisku, to odszedł o 3NF’a, bo to syf.
Rozszerz tabelę A o pole last_update_id. Kiedy wstawiasz jakiś rekord b do tabeli B, to dla wiersza w tabeli A o id=b.fk ustaw last_update_id na b.id, dzięki temu kiedy będziesz potrzebował odpytać o ostatni update zrobisz to w prosty i szybki (z punktu widzenia BD) sposób.