2016-07-21 9 views
-2

Ich habe eine Tabelle, die wie ich einen Wert zurückgibt untenselect max gemischter String/int Spalte

   id_unique    name serie  timeB timeD 
155488EA-FF70-49D7-99AB-AFD4125F3435 dell 14296188 05:51 06:19 
1B640883-0DB6-4255-B1ED-770B6578064C dell 14295943 04:37 04:39 

ich die max des Wertes möchte ich als Gebrüll eine SQL versucht haben:

select max(cast(id_unique as varchar(36))), 
max(name),max(serie),max(timeB),max(timeD) from mytable group by name 

ich habe dieses Ergebnis

1B640883-0DB6-4255-B1ED-770B6578064C dell 14296188 05:51 06:19 

Aber das Ergebnis, das ich brauche, ist dies:

155488EA-FF70-49D7-99AB-AFD4125F3435 dell 14296188 05:51 06:19 

Diese Methode, um das zu beheben?

+1

das Maximum von ** was ** Wert ?. Und können Sie den Spalten Ihres Tisches wenigstens Namen geben? – Lamak

+1

Sie haben genug Punkte, dass Sie wissen sollten, dass diese Frage nicht annähernd genug Informationen für jemanden hat, der Ihnen viel Hilfe geben kann. Möchten Sie das Maximum jeder Spalte? Die Top 1 basiert auf einigen mysteriösen Kriterien? –

+0

Ich fügte weitere Details hinzu –

Antwort

0

Wenn diese wirklich als Strings gespeichert sind, schätze ich, dass Sie die erste Spalte als uniqueidentifier vor dem Finden der max werfen wollen, sonst werden sie alphabetisch ausgewertet.

SQL Server 2012 und höher

Sie direkt die min/max von uniqueidentifiers bekommen:

select max(cast(id_unique as uniqueidentifier)) 
from MyTable 

Vorherige Versionen

Sie sollten als binäre gegossen (16) vor Finden der Min/Max. Ich bin dann wieder auf unique zur besseren Lesbarkeit der Ergebnisse Gießen:

select cast(max(cast(cast(id_unique as uniqueidentifier) as binary(16))) as uniqueidentifier) 
from MyTable 
+0

tatsächlich gehe ich diese Nachricht 'Operand Datentyp uniqueidentifier ist ungültig für max Operator –

+0

@downloaddowload gut Anruf; Ich hatte es nur auf einer neueren Version von SQL Server versucht. Bitte überprüfen Sie das Update. –

0

Meine Vermutung ist, dass Sie so etwas wie dies wollen row_number mit:

select * 
from (
    select *, row_number() over (order by somevalue desc) rn 
    from yourtable 
) t 
where rn = 1 

Wo somevalue wird die Spalte müssen Sie die max von . Ich nehme an, dass Sie derzeit versuchen, max für jedes Feld zu verwenden - das würde Ihre Ausgabe erklären ...

+0

Downvoter, wirklich ??? – sgeddes

+0

Es war nicht ich, aber ich verstehe, warum sie es uns angetan haben. –

+0

@TimLehner - für jemanden, jemanden zu downvoten, der versucht, eine Frage zu beantworten, ohne einen Kommentar zu hinterlassen, warum sollte nicht auf dieser Seite imho ... – sgeddes