sql >> Database >  >> RDS >> Oracle

SQL UPDATE in een SELECT-rang boven Partitiezin

U kunt deelnemen aan de subquery en doe een UPDATE :

UPDATE table_name t2
SET t2.rank=
  SELECT t1.rank FROM(
  SELECT company,
    direction,
    type,
    YEAR,
    MONTH,
    value,
    rank() OVER (PARTITION BY direction, type, YEAR, MONTH ORDER BY value DESC) AS rank
  FROM table_name
  GROUP BY company,
    direction,
    TYPE,
    YEAR,
    MONTH,
    VALUE
  ORDER BY company,
    direction,
    TYPE,
    YEAR,
    MONTH,
    VALUE
  ) t1
WHERE t1.company = t2.company
AND t1.direction = t2.direction;

Voeg vereiste voorwaarden toe aan het predikaat.

Of,

Je zou MERGE . kunnen gebruiken en bewaar die zoekopdracht in de USING clausule:

MERGE INTO table_name t USING
(SELECT company,
  direction,
  TYPE,
  YEAR,
  MONTH,
  VALUE,
  rank() OVER (PARTITION BY direction, TYPE, YEAR, MONTH ORDER BY VALUE DESC) AS rank
FROM table1
GROUP BY company,
  direction,
  TYPE,
  YEAR,
  MONTH,
  VALUE
ORDER BY company,
  direction,
  TYPE,
  YEAR,
  MONTH,
  VALUE
) s 
ON(t.company = s.company AND t.direction = s.direction)
WHEN MATCHED THEN
  UPDATE SET t.rank = s.rank;

Voeg vereiste voorwaarden toe aan de ON-clausule.



  1. OASIS-SVN en git gebruiken voor toegang tot broncodecontrole

  2. Een SQL-query schrijven om een ​​item uit de volgende tabel te SELECTEREN

  3. Is het sneller om te converteren naar varchar of varchar naar int bij het vergelijken in MySQL?

  4. Mysql-updatekolom bij het eerste voorkomen van elke gebruikersnaam