🚀 go-pugleaf

RetroBBS NetNews Server

Inspired by RockSolid Light RIP Retro Guy

Thread View: pl.comp.bazy-danych
3 messages
3 total messages Started by Adam Fri, 19 May 2023 00:55
Najnowszy rekord
#188724
Author: Adam
Date: Fri, 19 May 2023 00:55
40 lines
712 bytes
Witajcie.

Dotyczy MS-SQL.

Są dwie tabele, główna A i druga B.
Potrzebuję wyrzucić tylko najnowsze rekordy.

Powiedzmy, że jest baza książek i wypożyczeń.

Przykładowo tabela książki A:
ID_book, Book_Tytul
1, Faraon
2, Vinetou
3, Solaris


tabela wypożyczenia B:
ID_book, ID_wypoz, Osoba
2, 1, Jan Kowalski
2, 2, Anna Nowak
3, 3, Zenon Lubiany
3, 4, Olek Kwiatek
1, 5, Zuzia Nieduzia

chcę w wyniku otrzymać ostatnie wypożyczenia, czyli:
Book_Tytul, Osoba
Vinetou, Anna Nowak
Solaris, Olek Kwiatek
Faraon, Zuzia Nieduzia

Relackja 1:MANY  a.ID_book = B.ID_book

Totalne mam zaćmienie, nie potrafię do tego dołożyć distinct czy czegoś w
tym rodzaju.
Poratuje ktoś?


--
Pozdrawiam.

Adam
Re: Najnowszy rekord
#188725
Author: Adam
Date: Fri, 19 May 2023 14:31
56 lines
1079 bytes
Dnia Fri, 19 May 2023 00:55:08 +0200, Adam napisał(a):

> Witajcie.
>
> Dotyczy MS-SQL.
>
> Są dwie tabele, główna A i druga B.
> Potrzebuję wyrzucić tylko najnowsze rekordy.
>
> Powiedzmy, że jest baza książek i wypożyczeń.
>
> Przykładowo tabela książki A:
> ID_book, Book_Tytul
> 1, Faraon
> 2, Vinetou
> 3, Solaris
>
> tabela wypożyczenia B:
> ID_book, ID_wypoz, Osoba
> 2, 1, Jan Kowalski
> 2, 2, Anna Nowak
> 3, 3, Zenon Lubiany
> 3, 4, Olek Kwiatek
> 1, 5, Zuzia Nieduzia
>
> chcę w wyniku otrzymać ostatnie wypożyczenia, czyli:
> Book_Tytul, Osoba
> Vinetou, Anna Nowak
> Solaris, Olek Kwiatek
> Faraon, Zuzia Nieduzia
>
> Relackja 1:MANY  a.ID_book = B.ID_book
>
> Totalne mam zaćmienie, nie potrafię do tego dołożyć distinct czy czegoś w
> tym rodzaju.
> Poratuje ktoś?

SELECT A.Book_Tytul, B.Osoba

FROM tabelaA A

JOIN tabelaB B ON A.ID_book = B.ID_book

JOIN (

  SELECT ID_book, MAX(ID_wypoz) AS max_id_wypoz

  FROM tabelaB
  GROUP BY ID_book
) AS C
ON B.ID_book = C.ID_book AND B.ID_wypoz = C.max_id_wypoz


--
Pozdrawiam.

Adam
Re: Najnowszy rekord
#188726
Author: Adam
Date: Fri, 19 May 2023 14:40
74 lines
1432 bytes
Dnia Fri, 19 May 2023 14:31:57 +0200, Adam napisał(a):

> Dnia Fri, 19 May 2023 00:55:08 +0200, Adam napisał(a):
>
>> Witajcie.
>>
>> Dotyczy MS-SQL.
>>
>> Są dwie tabele, główna A i druga B.
>> Potrzebuję wyrzucić tylko najnowsze rekordy.
>>
>> Powiedzmy, że jest baza książek i wypożyczeń.
>>
>> Przykładowo tabela książki A:
>> ID_book, Book_Tytul
>> 1, Faraon
>> 2, Vinetou
>> 3, Solaris
>>
>> tabela wypożyczenia B:
>> ID_book, ID_wypoz, Osoba
>> 2, 1, Jan Kowalski
>> 2, 2, Anna Nowak
>> 3, 3, Zenon Lubiany
>> 3, 4, Olek Kwiatek
>> 1, 5, Zuzia Nieduzia
>>
>> chcę w wyniku otrzymać ostatnie wypożyczenia, czyli:
>> Book_Tytul, Osoba
>> Vinetou, Anna Nowak
>> Solaris, Olek Kwiatek
>> Faraon, Zuzia Nieduzia
>>
>> Relackja 1:MANY  a.ID_book = B.ID_book
>>
>> Totalne mam zaćmienie, nie potrafię do tego dołożyć distinct czy czegoś w
>> tym rodzaju.
>> Poratuje ktoś?
>
> SELECT A.Book_Tytul, B.Osoba
>
> FROM tabelaA A
>
> JOIN tabelaB B ON A.ID_book = B.ID_book
>
> JOIN (
>
>   SELECT ID_book, MAX(ID_wypoz) AS max_id_wypoz
>
>   FROM tabelaB
>   GROUP BY ID_book
> ) AS C
> ON B.ID_book = C.ID_book AND B.ID_wypoz = C.max_id_wypoz

Albo:

SELECT A.Book_Tytul, B.Osoba

FROM tabelaA A

JOIN (
  SELECT ID_book, Osoba,

         ROW_NUMBER() OVER (PARTITION BY ID_book ORDER BY ID_wypoz DESC)
AS rn

  FROM tabelaB
) AS B
ON A.ID_book = B.ID_book AND B.rn = 1


--
Pozdrawiam.

Adam
Thread Navigation

This is a paginated view of messages in the thread with full content displayed inline.

Messages are displayed in chronological order, with the original post highlighted in green.

Use pagination controls to navigate through all messages in large threads.

Back to All Threads