Zlaczenie 3 tabel 1 - wiele, z wybieraniem najnowszych rekordow

0

Witam,
mam do napisania zapytanie i moj SQL chyba jest za slaby, zeby temu zadaniu podolac. Otoz mam 3 tabele:
https://zapodaj.net/7aa929adb51bc.bmp.html
tabele.bmp

W TableA rekordow o Number = 7 moze byc wiele - a ja musze wybrac najnowszy.
W TableB jest jeden rekord o Number = 7 i go wybieram
W TableC znow moze byc wiele rekordow o Number = 7 - i tu tez musze wybrac najnowszy

I wszystkie te tabele musze zlaczyc, czyli wynikiem powinien byc 1 rekord wygladajacy np. tak:
Number TableA.ValA TableA.Date TableB.ValAa TableC.ValA TableC.ValB TableC.Date
7 aaa 2005 aaAA aaaaaa bbbbbb 2011

W przypadku tabel A i C, jesli w rekordach daty sie powtarzaja - mozna wybrac dowolna.
Zadanie jest dziwne ale rzeczywiste. Przenosimy dane ze starej bazy do nowej i chodzi o to, zeby zaimportowac mozliwie najnowsze dane. Number to towar. Tabela A przedstawia ceny zakupu - potrzebna w miare najnowsza. Tabela B to jednostki. Tabela C - ceny sprzedazy i inne - tez szukamy najnowszych.
Towarow jest kilkadziesiat tysiecy ale predkosc nie ma znaczenia.

Probowalem np. z Tabeli A i C wybierac rekordy = (SELECT MAX(Date)....) ale daty sie powtarzaja i rekordy duplikuja... I nie wiem jak z tym dalej ruszyc. Baza MSSQL.

0

najprościej:

select 
  a.*, 
  b.*, 
  c.* 
from 
  (SELECT Top(1) * FROM tabelaA WHERE number = 7 ORDER BY data desc) a,
  (SELECT FROM tabelaB WHERE number = 7) b,
  (SELECT Top(1) * FROM tabelaC WHERE number = 7 ORDER BY data desc) c

jeśli chcesz np. kilka różnych numerów to już będzie bardziej skomplikowane

2

A może po prostu użyć row_number()

with tabA as (
select
  row_number() over (partition by number order by data desc) r
  ,tableA.*
 from
  tableA), tabC as (select
  row_number() over (partition by number order by data desc) r
  ,tableC.*
 from
  tableC)
  
  select
    *
  from 
    tableB
    inner join tabc on tabc.number = tableb.number and tabc.r=1    
    inner join taba on taba.number = tableb.number and taba.r=1

http://sqlfiddle.com/#!6/b42e6/21

0

Dziekuje Wsztyskim za pomoc. Temat zostal odlozony na przyszly tydzien ale powroce do niego i wykorzystam..... chyba zaczne od rozwiazania Panczo.

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