Funkce MAX v update dotazu   zodpovězená otázka

SQL

Zdravím, mohl by mě prosím někdo popostrčit? Zasekl jsem se na triviální věci a už pro stromy nevidím les:(

Mám dvě tabulky a na první volám UPDATE. Je v ní sloupec id_rs který je PK a pak sloupec pocatek_obdobi do kterého potřebuju doplnit datum z druhé tabulky.

V druhé tabulce je taky sloupec id_rs ale ten není PK, protože zde může být pro jedno id_rs několik různých datumů, např. takto:

   ID_RS                  OBDOBI
    187                  2009-11-01
    187                  2009-12-01
    187                  2010-01-01
    188                  2009-11-01
    188                  2009-12-01
    190                  2009-11-01

atd. A já potřebuju do první tabulky doplnit vždy nejvyšší datum vztahující se k danému ID. Mám tedy dotaz:

UPDATE seznam
SET seznam.pocatek_obdobi=CelkovePredpisy.obdobi_do
FROM @seznamSmluv AS seznam 
INNER JOIN tb_predpisy_celkove AS CelkovePredpisy
ON seznam.id_rs=CelkovePredpisy.id_rs

kde ale není ošetřeno že se mi vrátí MAX hodnota. Pokud tam zkusím propašovat klauzuli MAX:

UPDATE seznam
SET seznam.pocatek_obdobi=MAX(CelkovePredpisy.obdobi_do)
FROM @seznamSmluv AS seznam 
INNER JOIN tb_predpisy_celkove AS CelkovePredpisy
ON seznam.id_rs=CelkovePredpisy.id_rs

pošle mě to do háje s hláškou: An aggregate may not appear in the set list of an UPDATE statement.

Jak by se toto dalo elegantně vyřešit?

nahlásit spamnahlásit spam 0 odpovědětodpovědět

Uděláte to tak, že vytvoříte poddotaz, který bude už vracet agregovaná data, například:

UPDATE [neco]
SET [neco].[hodnota] = [zdroj].[novaHodnota]
FROM [neco]
JOIN (
    select MAX([hodnota]) as [novaHodnota], [skupinaId] as [id]
       from [druhaTabulka]
       group by [skupinaId]
) [zdroj] ON [zdroj].[id] = [neco].[id]

Jde prakticky o to, udělat dotaz, který vám vrátí požadované hodnoty, které už chcete přímo zapsat do tabulky. Tzn. agregace již vyřešíte uvnitř.

nahlásit spamnahlásit spam 1 / 1 odpovědětodpovědět

To je přesně ono, děkuji:)

nahlásit spamnahlásit spam 0 odpovědětodpovědět
                       
Nadpis:
Antispam: Komu se občas házejí perly?
Příspěvek bude publikován pod identitou   anonym.
  • Administrátoři si vyhrazují právo komentáře upravovat či mazat bez udání důvodu.
    Mazány budou zejména komentáře obsahující vulgarity nebo porušující pravidla publikování.
  • Pokud nejste zaregistrováni, Vaše IP adresa bude zveřejněna. Pokud s tímto nesouhlasíte, příspěvek neodesílejte.

přihlásit pomocí externího účtu

přihlásit pomocí jména a hesla

Uživatel:
Heslo:

zapomenuté heslo

 

založit nový uživatelský účet

zaregistrujte se

 
zavřít

Nahlásit spam

Opravdu chcete tento příspěvek nahlásit pro porušování pravidel fóra?

Nahlásit Zrušit

Chyba

zavřít

feedback