首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 数据库 > SQL Server >

MSSQL查询难点

2013-01-11 
MSSQL查询难题有一批号码(号码可以重复),每个号码有一个时间。想建个视图什么的,生成多一列出来,新的这列保

MSSQL查询难题
有一批号码(号码可以重复),每个号码有一个时间。想建个视图什么的,生成多一列出来,新的这列保存次数(即如果一个号码,有多少个和它相同的号码,并且时间比它早,即它的次数为相同的号码数量加1),如下图所示。
MSSQL查询难点
[解决办法]


SELECT 号码,时间,次数=(ROW_NUMBER()OVER(PARTITION BY 号码,ORDER BY 时间))-1  
FROM TABLEA ),
A2 AS(
SELECT 号码,MIN(时间) 
FROM TABLEA 
GROUP BY 号码

[解决办法]



DECLARE @t table
(
  number varchar(10),
  cdate datetime
)

INSERT INTO @t
  SELECT '123', '2012/2/13 16:23:12'
  UNION
  SELECT '234', '2012/2/25 16:23:12'
  UNION
  SELECT '123', '2012/5/13 16:23:12'
  UNION
  SELECT '235', '2011/2/13 16:23:12'
  UNION
  SELECT '321', '2012/1/15 16:23:12'
  UNION
  SELECT '234', '2012/2/17 16:23:12'
  UNION
  SELECT '123', '2012/2/13 20:11:01'
  UNION
  SELECT '321', '2012/1/10 16:23:12'
  
SELECT t1.number,t1.cdate, COUNT(t2.number)+1
FROM @t t1
LEFT JOIN @t t2 
ON t1.number=t2.number AND t1.cdate>t2.cdate

GROUP BY t1.number, t1.cdate, t2.number



运行结果:
number   cdate                  次数
-----------------------------------
1232012-02-13 16:23:12.0001
1232012-02-13 20:11:01.0002
1232012-05-13 16:23:12.0003
2342012-02-17 16:23:12.0001
2342012-02-25 16:23:12.0002
2352011-02-13 16:23:12.0001
3212012-01-10 16:23:12.0001
3212012-01-15 16:23:12.0002

热点排行