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

前端之家收集整理的这篇文章主要介绍了一条语句简单解决“每个Y的最新X”的经典sql语句前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。

<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列在建立索引,可以大大优化查询速度。

原文链接:https://www.f2er.com/mssql/64494.html

猜你在找的MsSQL相关文章