sql >> Database teknologi >  >> RDS >> Oracle

Opdater med gruppe af

Dit spørgsmål er lidt forvirrende. Du siger, at du gerne vil indstille værdien b til en minimumsværdi fra partitionen a den kolonne b er i række med, mens rækkerne indeholder b = 1 bør forblive urørt.

Ud fra hvad jeg kan se i dit spørgsmål som kommentarer (jeg går ud fra, at det er dit forventede output) ønsker du også at få den minimumsværdi, der følger efter 1 inden for en partition - så du vil grundlæggende have minimumsværdien b der er større end 1 .

Nedenfor er en SQL-forespørgsel, der gør dette

UPDATE t1 alias
  SET b = (
    SELECT min(b) 
    FROM t1 
    WHERE alias.a = t1.a 
      AND t1.b > 1 -- this would get the minimum value higher than 1
    GROUP BY a
  )
  WHERE alias.b > 1 -- update will not affect rows with b <= 1
 

Output efter opdatering

a | b ---+--- 1 | 0 1 | 1 2 | 1 2 | 2 3 | 1 3 | 2 3 | 2 4 | 1 4 | 3 4 | 3 4 | 3


  1. SQL SUM() for begyndere

  2. Opdaterer post UDEN at opdatere tidsstempel

  3. Sådan ændres max_allowed_packet size

  4. Indlæs xml i mysql-tabel med element