首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >如何选择最大的列类型是唯一标识符

如何选择最大的列类型是唯一标识符
EN

Stack Overflow用户
提问于 2016-07-23 18:14:30
回答 2查看 1.9K关注 0票数 1

我有一张桌子的结构和下面一样

代码语言:javascript
运行
复制
create table shpro(
    Gid uniqueidentifier,
    id int,
    prod varchar(30),
    orderdate datetime,
    shipdate datetime
    )

我希望获得订单和发货日期的最大值,并删除重复的数据,我尝试了以下查询

代码语言:javascript
运行
复制
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的列转换为varcharBINARY,我尝试了如下所示的查询

代码语言:javascript
运行
复制
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的东西

有人能帮我吗?

EN

回答 2

Stack Overflow用户

发布于 2018-04-18 18:25:41

“操作数数据类型unique标识符对于max运算符无效”是键,它告诉您max(unique标识符)不受支持。要么升级到支持此功能的版本,要么转换为max中的varchar,这样速度更慢。

例如,MS 2008 R2将抛出此错误,而MS 2012则不会。

票数 3
EN

Stack Overflow用户

发布于 2016-07-23 19:00:01

如果我很清楚地理解了您,下面是如何获得MAX()用于orderdate和ship数据以及其他选择结果的方法:

代码语言:javascript
运行
复制
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
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/38545050

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档