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

一条语句简单解决“每个Y的最新X”的经典sql语句

发布时间:2020-12-12 09:38:48 所属栏目:MsSql教程 来源:网络整理
导读:div class="codetitle" a style="CURSOR: pointer" data="10320" class="copybut" id="copybut10320" onclick="doCopy('code10320')" 代码如下:div class="codebody" id="code10320" / ** 创建表 ** / ifexists(select*fromdbo.sysobjectswhereid=object_id(

<div class="codetitle"><a style="CURSOR: pointer" data="10320" class="copybut" id="copybut10320" onclick="doCopy('code10320')"> 代码如下:<div class="codebody" id="code10320">
/**创建表**/
ifexists(select*fromdbo.sysobjectswhereid=object_id(N'[dbo].[Table]')andOBJECTPROPERTY(id,N'IsUserTable')=1)
droptable[dbo].[Table]
GO
CreateTABLE[dbo].[Table](
[ID][int]IDENTITY(1,1)NOTNULL,
[Y]nvarcharCOLLATEChinese_PRC_CI_ASNOTNULL,
[X][smalldatetime]NOTNULL
)ON[PRIMARY]
GO
--插入数据
InsertINTOTablevalues('CCC','2007-02-0202:02:02')
InsertINTOTablevalues('AAA','2007-03-0303:03:03')
InsertINTOTablevalues('BBB','2007-01-0101:01:01')
InsertINTOTablevalues('DDD',X)values('EEE','2007-03-0303:03:03')
GO /**创建表**/
ifexists(select*fromdbo.sysobjectswhereid=object_id(N'[dbo].[Table]')andOBJECTPROPERTY(id,'2007-03-0303:03:03')

GO解决“每个Y的最新X”经典SQL问题:以下几种方法真是八仙过海
<div class="codetitle"><a style="CURSOR: pointer" data="2034" class="copybut" id="copybut2034" onclick="doCopy('code2034')"> 代码如下:<div class="codebody" id="code2034">SelectID,Y,X
FROM[Table]T1
Where(NOTEXISTS
(Select1
FROM[Table]T2
Where(T2.Y=T1.Y)AND(T2.X>T1.Xor
T2.X=T1.XANDT2.ID>T1.ID)))
//
Select

FROM[Table]
WhereIDIN
(SelectMAX(T1.ID)
FROM[Table]T1JOIN
(Selecty,MAX(x)x
FROM[Table]
GROUPBYy)T2ONT1.Y=T2.YANDT1.x=T2.x
GROUPBYT1.y)
/*****/
SelectT.ID,T.Y,T.X
FROM[Table]TINNERJOIN
(SelectMAX(T1.ID)ASID
FROM[Table]T1JOIN
(Selecty,MAX(x)x
FROM[Table]
GROUPBYy)T2ONT1.Y=T2.YANDT1.x=T2.x
GROUPBYT1.y)T2ONT.ID=T2.ID
/*
/
Select*
FROM[Table]T1
WhereIDIN
(SelectTOP1ID
FROM[Table]
WhereY=T1.Y
orDERBYXDESC)
//
Select

FROM[Table]T1
Where(ID=
(SelectTOP1ID
FROM[Table]
WhereY=T1.Y
orDERBYXDESC,IDDESC))
/*****/ /*
/
SelectID,IDDESC))

/*****
/效率嘛,在不同的字段建立索引速度都不尽相同,使用者见仁见智了.
第一种方法速度在各方面都不错,而且在Y列在建立索引,可以大大优化查询速度。

(编辑:李大同)

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

    推荐文章
      热点阅读