2016-03-30 6 views
0

Mit dieser Abfrage, was ich SQL zu tun brauche, aktualisiert einen Spaltenwert basierend auf einer anderen Spalte, so dass es die neueste MAX ID ergreift.T SQL Update Zeilen mit Max Funktion

select 
    max(T1id), t1.v_code 
from 
    [Table1] T1 
join 
    [Table2] t2 on t1.T1Code = t2.T2Code 
where 
    t2.active = 0 
    and t1.t1activesw = 0 
    and t1.mapping not like '%selected%' 
group by 
    t1.v_code 

Ich mag würde die Auswahl in der Tabelle auf den Versionscode id = max (t1.v_code) und verwenden Sie dann den Code als Unter beizutreten wählen Sie einfach nicht sicher, wie es zu beenden.

+0

Vielleicht ist es für mich zu früh, aber es fällt mir wirklich schwer zu verstehen, was du machen willst. Können Sie die Absicht der Abfrage klären? – UnhandledExcepSean

+0

T Clausens Beitrag ist korrekt, da ich versuche, dass die Ergebnisse die höchste t1.id für jeden t1.v_code erhalten. Das Endziel besteht darin, t1.active = 1 basierend auf der höchsten ID für jeden t1.v_code zu aktualisieren. – CMO79

Antwort

0

Damit Sie alle Daten aus der Reihe bekommen, um mit dem höchsten T1.id für jeden T1.v_code:

;WITH CTE as 
(
    SELECT 
     T1.*, 
     row_number() over (partition by T1.v_code order by T1.id desc) rn 
    FROM 
     [Table1] T1 
    JOIN 
    [Table2] t2 on t1.T1Code = t2.T2Code 
    WHERE 
    t2.active = 0 
    and t1.t1activesw = 0 
    and t1.mapping not like '%selected%' 
) 
SELECT * 
FROM CTE 
WHERE rn = 1 

Edit: Um zu aktualisieren, zu ersetzen (wie in commment angefordert)

SELECT * 
FROM CTE 
WHERE rn = 1 

mit

UPDATE CTE 
SET columnname = 'newvalue' 
WHERE rn = 1 

diese

+0

Danke t-clausen das habe ich noch nie gemacht. Nachdem ich nur in vorhandenen Kontrolltischen gearbeitet habe, habe ich noch keins eingerichtet! – CMO79

+0

Wenn dies funktioniert, vergessen Sie nicht, die Antwort zu akzeptieren bitte –

+0

Suchen Sie nach, wie alle diese Datensätze im CTE aktualisiert werden. – CMO79