我希望只使用各自的AnsId
,
我有以下数据结构,
Qid Time AnsId
01 2011-09-26 12:55:10 01
02 2011-09-26 12:58:32 03
03 2011-09-26 12:59:05 02
01 2011-09-26 01:02:10 01
03 2011-09-26 01:30:10 01
02 2011-09-26 01:59:10 02
我编写了以下查询,但它返回所有行:
SELECT DISTINCT Qid, Time, AnsId
FROM table
ORDER BY Time DESC
那么select查询中缺少什么部分?
答案 0 :(得分:2)
您可以使用row_number()
查找每个Qid
的最后一个答案:
select *
from (
select row_number() over (partition by Qid order by Time desc) as rn
, *
from YourTable
) as SubQueryAlias
where rn = 1
子查询是必需的,因为SQL Server不允许row_number
直接使用where
。
答案 1 :(得分:1)
declare @T table
(
Qid char(2),
[Time] datetime,
AnsId char(2)
)
insert into @T values
('01', '2011-09-26 12:55:10', '01'),
('02', '2011-09-26 12:58:32', '03'),
('03', '2011-09-26 12:59:05', '02'),
('01', '2011-09-26 01:02:10', '01'),
('03', '2011-09-26 01:30:10', '01'),
('02', '2011-09-26 01:59:10', '02')
select T.Qid,
T.[Time],
T.AnsId
from
(
select T.Qid,
T.[Time],
T.AnsId,
row_number() over(partition by T.Qid order by T.[Time] desc) as rn
from @T as T
) as T
where T.rn = 1
order by T.[Time] desc
结果:
Qid Time AnsId
---- ----------------------- -----
03 2011-09-26 12:59:05.000 02
02 2011-09-26 12:58:32.000 03
01 2011-09-26 12:55:10.000 01