2016-07-23 4 views
0

ist Ich habe eine Tabelle mit einer Struktur, wie untenWie kann ich einen max von Spalte auswählen, welche Art eindeutige Kennung

create table shpro(
    Gid uniqueidentifier, 
    id int, 
    prod varchar(30), 
    orderdate datetime, 
    shipdate datetime 
    ) 

ich mag das Entfernen den max des bestelldatum und ShipDate bekommen und auch die doppelten Daten i die Abfrage als versuchte unten

select 
     MAX(p1.Gid) Gid, 
     MAX(p1.id) id, 
     MAX(p1.prod) prod, 
     MAX(p1.orderdate) orderdate, 
     MAX(p2.shipdate) shipdate 
from shpro p1 inner join shpro p2 
on p1.id=p2.id 
where cast(p1.orderdate as DATE)>GETDATE() and cast(p1.shipdate as DATE)<GETDATE()-1 
group by p1.prod 

ich den Fehler Operand Datentyp erhalten haben uniqueidentifier für max Betreiber ungültig ist.

, was ich habe versucht, die Spalte mit uniqueidentifier-varchar OR BINARY zu konvertieren habe ich versucht, die Abfrage als Gebrüll

select 
     MAX(cast(p1.Gid as varchar(36))) Gid, 
     MAX(p1.id) id, 
     MAX(p1.prod) prod, 
     MAX(p1.orderdate) orderdate, 
     MAX(p2.shipdate) shipdate 
from shpro p1 inner join shpro p2 
on p1.id=p2.id 
where cast(p1.orderdate as DATE)>GETDATE() and cast(p1.shipdate as DATE)<GETDATE()-1 
group by p1.prod 

es mir ein Ergebnis geben, aber es ist ein falsches Ergebnis

ich eine haben Idee mit CTE aber ich will etwas ohne zu verwenden CTE

Kann mir jemand helfen?

+1

Auswahl MAX (p1.Gid) und MAX (p1.id) doesn Es scheint keinen Sinn zu machen, warum wählst du es aus? Sie möchten Aufträge mit maximalem Bestelldatum und Lieferdatum auswählen? –

+0

nur um eine 'group by' zu verwenden, wenn ich das nicht benutzte ich kann keine' group by' ja zur zweiten 'query' machen es gibt mir ein Ergebnis zurück –

+0

Sie wollen also eine einfache Abfrage + max für Daten , habe ich recht? –

Antwort

0

Wenn ich Sie klar zu verstehen, hier ist, wie Sie MAX erhalten kann() für bestelldatum und Schiffsdaten unter anderen ausgewählten Ergebnisse:

SELECT 
    p1.Gid, 
    p1.id, 
    MAX(p1.orderdate) OVER (PARTITION BY p1.prod) AS max_orderdate, 
    MAX(p2.shipdate) OVER (PARTITION BY p1.prod) AS max_shipdate 
FROM shpro AS p1 INNER JOIN shpro AS p2 
     ON p1.id = p2.id 
WHERE 
    cast(p1.orderdate AS DATE) > GETDATE() AND cast(p1.shipdate AS DATE) < GETDATE() - 1 
Verwandte Themen