2

それぞれAnsIdの、で個別の行のみを取得したい

Qid:01のように最後のAnsId:01があります

私は次のデータ構造を持っています、

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

それでは、選択クエリに欠けている部分は何ですか?

4

2 に答える 2

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

row_numberSQL Serverでは直接許可しないため、サブクエリが必要ですwhere

于 2011-09-26T08:33:50.520 に答える
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
于 2011-09-26T08:37:49.347 に答える