2017-10-24 1 views
0

Ich habe eine Tabelle, in der ich wie unten einige Spalten haben:wie Zeilen aus, in dem Spaltenwert geändert hat

Cusnbr Name LoadNumber 
1  Z  10 
1  Z  9 
1  Z  8 
1  C  7 
1  C  6 
1  C  5 
1  B  4 
1  B  3 
1  A  2 
1  A  1 

es ist nur für eine cusnbr gibt es Millionen von cusnbr wie dieses ..

ich möchte eine Ausgabe wie unten

Cusnbr Name LoadNumber 
1  C  7 
1  B  4 
1  A  2 

Dafür habe ich unter Abfrage in sQL Server schreiben 2008:

;With x as 
(
    Select * ,rn=Row_number() over (order by cusnbr,loadnumber) from table 
) 
select x.* from x left outer join x as y on x.rn=y.rn+1 
and x.name<>y.name where y.name is not null 

aber ich bin nicht die gewünschte Ausgabe in dem obigen Code bekomme ich letzte Z auch immer bin, das will ich nicht, und ich bin immer unregelmäßig Daten nicht in der richtigen Form, in der ich will

Jede Hilfe wird geschätzt werden !!

wie dieses Ich möchte aber nicht in der Lage die gewünschte Ausgabe

I use this example

+1

nicht klar. Willst du die größte Nummer finden? – NEER

+0

nicht die größte Zahl ich möchte die letzte Zeile ändern – Amitesh

+0

Spalten müssen sortiert werden. Welche Spalten sortieren Sie in dem Beispiel, das Sie angegeben haben? – NEER

Antwort

0

zu bekommen Obwohl sich mir die Frage nicht klar ist, von dem Ausgang Erraten I Dense Rang ausprobiert haben. Ich vermutete, dass Sie den Datensatz mit der höchsten LoadNumber mit dem gleichen Namen wollen.

Select * from cteTrial where LoadNumber in (
Select MAX(x.LoadNumber) as LoadNumber from (
Select cusnbr , name , LoadNumber , DENSE_RANK() over (order by Name desc) 
as Dense from cteTrial) as x group by x.Dense 
) 

Wenn Sie CTE verwenden können, wird es bessere Leistung produzieren.

+0

ctetrail ist x von meiner Cte oder Tabelle – Amitesh

+0

cteTrial ist Tabellenname Ich habe nicht CTE – Saronyo

+0

Ich aktualisiere meine Frage gibt es einen Link Ich benutze den Code – Amitesh

0

ich den Code per erwartet geschrieben

;With cte(Cusnbr , Name , LoadNumber) 
AS 
(
SELECT 1,'Z', 10 Union all 
SELECT 1,'Z', 9 Union all 
SELECT 1,'Z', 8 Union all 
SELECT 1,'C', 7 Union all 
SELECT 1,'C', 6 Union all 
SELECT 1,'C', 5 Union all 
SELECT 1,'B', 4 Union all 
SELECT 1,'B', 3 Union all 
SELECT 1,'A', 2 Union all 
SELECT 1,'A', 1 
) 
SELECT cusnbr, 
     NAME, 
     loadnumber 
FROM (SELECT *, 
       Row_number() 
       OVER( 
        partition BY NAME 
        ORDER BY loadnumber DESC) AS RNk, 
       Row_number() 
       OVER( 
        ORDER BY (SELECT 1)) - 1 AS RNO 
     FROM (SELECT * 
       FROM cte)dt)DT2 
WHERE DT2.rnk = 1 
     AND rno > 0 
ORDER BY NAME DESC 

Ergebnis

cusnbr NAME loadnumber 
------------------------- 
1  C   7 
1  B   4 
1  A   2 
+0

Warum nehmen Sie alle Wert in Cte ist nur ein Datensatz ihre sind Millionen Datensätze – Amitesh

+0

haben diese Abfrage in lokalen – Amitesh

+0

getestet Ihre Ausgabe ist falsch Freund können Sie bitte erneut überprüfen – Amitesh

Verwandte Themen