2016-07-23 75 views
0

列的最大我有一個表,其結構爲波紋管如何選擇哪種類型是唯一標識符

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

我想訂購日期和SHIPDATE的最大值,並刪除重複數據我試圖查詢作爲波紋管

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 

我已經得到了錯誤操作數的數據類型uniqueidentifiermax操作無效。

我所做的是試圖將柱uniqueidentifiervarchar OR BINARY我試圖查詢作爲波紋管

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 

它給我一個結果轉換,但它是一個錯誤的結果

我有一個想法使用CTE但我想要的東西沒有使用CTE

有人可以幫助我嗎?

+1

選擇MAX(p1.Gid)和MAX(p1.id)沒有按似乎沒有道理,爲什麼選擇它?你想選擇最大訂單和發貨日期的訂單嗎? –

+0

只是爲了使用'group by'如果我沒有使用這個我瘦我不能做一個'group by'是第二個'query'這是返回結果 –

+0

所以你想要一個簡單的查詢+最大日期, 我對嗎? –

回答

0

如果我理解你清楚了,這裏是你如何可以用於除其他選擇的結果訂購日期和船舶數據獲取MAX():

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