34,590
社区成员
发帖
与我相关
我的任务
分享
create table tb
(
id nvarchar(2),
name nvarchar(20),
net int,
datatime datetime
)
insert into tb values('01','A',10,'2012-01-01 00:12:00')
insert into tb values('02','A',10,'2012-01-01 00:13:00')
insert into tb values('03','B',10,'2012-01-01 00:14:00')
insert into tb values('04','B',10,'2012-01-01 00:15:00')
insert into tb values('05','A',10,'2012-01-02 00:12:00')
select id,name,net datatime,
sort = row_number() over (partition by name,net,convert(nvarchar(10),datatime,120) order by id)
from tb
order by id
/*
id,name,datatime,sort
01,A,10,1
02,A,10,2
03,B,10,1
04,B,10,2
05,A,10,1
(5 行受影响)
--> 测试数据:[tb]
IF OBJECT_ID('[tb]') IS NOT NULL DROP TABLE [tb]
GO
CREATE TABLE [tb]([ID] VARCHAR(2),[NAME] VARCHAR(1),[NET] INT,[DATATIME] DATETIME)
INSERT [tb]
SELECT '01','A',10,'2012-01-01 00:12:00' UNION ALL
SELECT '02','A',10,'2012-01-01 00:13:00' UNION ALL
SELECT '03','B',10,'2012-01-01 00:14:00' UNION ALL
SELECT '04','B',10,'2012-01-01 00:15:00' UNION ALL
SELECT '05','A',10,'2012-01-02 00:12:00'
--------------开始查询--------------------------
SELECT *,sort =ROW_NUMBER()OVER(PARTITION BY[NAME],CONVERT(VARCHAR(10),[DATATIME],120) ORDER BY [DATATIME] ) FROM [tb]
ORDER BY id
----------------结果----------------------------
/*
ID NAME NET DATATIME sort
---- ---- ----------- ----------------------- --------------------
01 A 10 2012-01-01 00:12:00.000 1
02 A 10 2012-01-01 00:13:00.000 2
03 B 10 2012-01-01 00:14:00.000 1
04 B 10 2012-01-01 00:15:00.000 2
05 A 10 2012-01-02 00:12:00.000 1
(5 行受影响)
*/
select id,name,net datatime,sort = row_number() over (partition by name,net,convert(nvarchar(10),datatime,120) order by id)
from tb
order by id
--try
SELECT *,
(
SELECT COUNT(*) FROM TB WHERE [NAME]=t.[NAME]
AND Format([DATATIME],"yyyy-mm-dd")=Format(t.[DATATIME],"yyyy-mm-dd")
AND [DATATIME]<=T.[DATATIME]
) as sort
FROM [tb] AS t
DECLARE @tb TABLE ([ID] VARCHAR(2),[NAME] VARCHAR(1),[NET] INT,[DATATIME] DATETIME)
INSERT @tb
SELECT '01','A',10,'2012-01-01 00:12:00' UNION ALL
SELECT '02','A',10,'2012-01-01 00:13:00' UNION ALL
SELECT '03','B',10,'2012-01-01 00:14:00' UNION ALL
SELECT '04','B',10,'2012-01-01 00:15:00' UNION ALL
SELECT '05','A',10,'2012-01-02 00:12:00'
SELECT *,
(SELECT COUNT(*)+1 FROM @tb WHERE [NAME] = T.[NAME] AND CONVERT(VARCHAR(12),[DATATIME],120) = CONVERT(VARCHAR(12),T.[DATATIME],120) AND [DATATIME] < T.[DATATIME])
--ROW_NUMBER() OVER(PARTITION BY [NAME],CONVERT(VARCHAR(12),[DATATIME],120) ORDER BY [DATATIME]) [Rank]
FROM @tb AS T
ORDER BY ID
DECLARE @tb TABLE ([ID] VARCHAR(2),[NAME] VARCHAR(1),[NET] INT,[DATATIME] DATETIME)
INSERT @tb
SELECT '01','A',10,'2012-01-01 00:12:00' UNION ALL
SELECT '02','A',10,'2012-01-01 00:13:00' UNION ALL
SELECT '03','B',10,'2012-01-01 00:14:00' UNION ALL
SELECT '04','B',10,'2012-01-01 00:15:00' UNION ALL
SELECT '05','A',10,'2012-01-02 00:12:00'
SELECT *,
ROW_NUMBER() OVER(PARTITION BY [NAME],CONVERT(VARCHAR(12),[DATATIME],120) ORDER BY [DATATIME]) [Rank]
FROM @tb
ORDER BY ID
ID NAME NET DATATIME Rank
---- ---- ----------- ----------------------- --------------------
01 A 10 2012-01-01 00:12:00.000 1
02 A 10 2012-01-01 00:13:00.000 2
03 B 10 2012-01-01 00:14:00.000 1
04 B 10 2012-01-01 00:15:00.000 2
05 A 10 2012-01-02 00:12:00.000 1
(5 row(s) affected)