我有一张桌子的结构和下面一样
create table shpro(
Gid uniqueidentifier,
id int,
prod varchar(30),
orderdate datetime,
shipdate datetime
)
我希望获得订单和发货日期的最大值,并删除重复的数据,我尝试了以下查询
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
我得到了错误的uniqueidentifier
操作数类型对于操作符是无效的。
我所做的是尝试将带有uniqueidentifier
的列转换为varchar
或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
的东西
有人能帮我吗?
发布于 2018-04-18 18:25:41
“操作数数据类型unique标识符对于max运算符无效”是键,它告诉您max(unique标识符)不受支持。要么升级到支持此功能的版本,要么转换为max中的varchar,这样速度更慢。
例如,MS 2008 R2将抛出此错误,而MS 2012则不会。
发布于 2016-07-23 19:00:01
如果我很清楚地理解了您,下面是如何获得MAX()用于orderdate和ship数据以及其他选择结果的方法:
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
https://stackoverflow.com/questions/38545050
复制相似问题