加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 站长学院 > MsSql教程 > 正文

如何将表连接到其自身并在SQL中选择最大值

发布时间:2020-12-12 08:22:30 所属栏目:MsSql教程 来源:网络整理
导读:我有合约表: contractId date price partId1 20120121 10 12 20110130 9 13 20130101 15 24 20110101 20 2 最大的合同是积极的合同(不要责怪我,我责怪创建xpps的信息) 我需要创建查询才能看到只有活动的合约(每份一份合约,最高日期合约). 所以查询的结果应该
我有合约表:
contractId    date       price     partId
1             20120121   10        1
2             20110130   9         1
3             20130101   15        2
4             20110101   20        2

最大的合同是积极的合同(不要责怪我,我责怪创建xpps的信息)

我需要创建查询才能看到只有活动的合约(每份一份合约,最高日期合约).

所以查询的结果应该是这样的:

contractId    date       price     partId
1             20120121   10        1
3             20130101   15        2

我在这里没有想法,我尝试自己加入表,我尝试了汇总功能,但我无法想象出来.如果有人有任何想法,请与我们分享.

解决方法

这将在几乎所有的RDBM上工作,
SELECT  a.*
FROM    tableName A
        INNER JOIN
        (
            SELECT partID,MAX(date) maxDate
            FROM    tableName
            GROUP BY partID
        ) B on a.partID = b.partID AND
                a.date = b.maxDate

> SQLFiddle Demo

如果您的RDBMS支持Window功能,

SELECT  contractId,date,price,partId
FROM    
(
    SELECT contractId,partId,ROW_NUMBER() OVER (PARTITION BY PartID
                                ORDER BY date DESC) rn
    FROM    tableName
) s
WHERE   rn = 1

> SQLFiddle Demo

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读