我有这张桌子:
我需要获取此表:
一个类应对应一个id。该类的选择如下:1)选择最常见的id类(例如,id 222对应于类C)。 2)如果类的数量相等(如ID 111),则选择最后一个日期的类(例如,对于ID 111,类A和B发生3次,但键入B是因为它是该ID的最后日期)。
提前谢谢!
答案 0 :(得分:2)
您也可以只使用一个分组子查询来完成此操作:
SELECT id,
(SELECT TOP 1 t2.class FROM tbl t2
WHERE t2.id=t1.id GROUP BY t2.class
ORDER BY COUNT(t2.class) DESC,
MAX(t2.date1) DESC) class
FROM tbl t1 GROUP BY id
答案 1 :(得分:1)
使用ROW_NUMBER
进行排名,然后在排名为1时进行过滤。
;WITH IdRankings AS
(
SELECT
T.Id,
T.Class,
Ranking = ROW_NUMBER() OVER (PARTITION BY T.ID ORDER BY COUNT(1) DESC, MAX(T.date1) DESC)
FROM
YourTable AS T
GROUP BY
T.Id,
T.Class
)
SELECT
I.Id,
I.Class
FROM
IdRankings AS I
WHERE
I.Ranking = 1
答案 2 :(得分:1)
如果愿意,您可以执行此操作而没有子查询
select top (1) with ties t.id, t.class
from t
group by t.id, t.class
order by row_number() over (partition by t.id order by count(*) desc, max(t.date) desc);