sql >> Databáze >  >> RDS >> Sqlserver

Zpackaná data SQL - Vyberte v příkazu aktualizace

Před provedením UPDATE:

bych předem vypočítal nejvyšší hodnoty a uložil je do dočasné tabulky
SELECT
    R1.Date,
    R1.ContestID,
    (SELECT TOP 1 R2.Position
     FROM Results R2
     WHERE R2.Date = R1.Date AND R2.ContestID = R1.ContestID
     ORDER BY R2.Position DESC) AS TopPosition
INTO #temp
FROM
    (SELECT DISTINCT Date, ContestID FROM Results) R1;

UPDATE Results R
SET    R.Points = 100 + ((100/((SELECT TopPosition FROM #temp T
                                WHERE T.Date = R.Date AND
                                      T.ContestID = R.ContestID)-4) *
                            ((SELECT TopPosition FROM #temp T
                              WHERE T.Date = R.Date AND
                                    T.ContestID = R.ContestID)-R.Position)))
WHERE  R.ContestID > 11
AND    R.Position > 4
AND    R.Position < (SELECT TopPosition FROM #temp T
                     WHERE T.Date = R.Date AND T.ContestID = R.ContestID);

Nejsem si však jistý, jak NumberOfResults a NumberOfPlaces jsou definovány. Vybíráte nejvyšší pozici, ale nikdy nepočítáte žádná čísla. Možná to můžete přidat do SELECT:

...,
(SELECT COUNT(*)
 FROM Results R2
 WHERE R2.Date = R1.Date AND R2.ContestID = R1.ContestID) AS NumberOfResults
INTO ...


  1. Jak provést výpočet v časových intervalech?

  2. Oracle v C#, vázat proměnné a dotazy jako ID IN (1, 2, 3)

  3. Umlčení postgres log spamu v rails 3 logs

  4. PHP MYSQL - Vložit do bez použití názvů sloupců, ale s polem automatického přírůstku