我有以下查询并针对每个 id
我得到了超过 3 个 Action /代码
你能告诉我如何获得前两名吗
通过使用 select 语句而不是针对每个 id 的操作
写程序
SELECT id,
code,
date,
des
FROM accounts INNER JOIN
accdesc ON accoints.code = accdesc.act_cd
ORDER BY accounts.id
查询返回以下数据
id code date desc
609 AG1 2005-11-07 a
609 AG2 2004-11-12 a clear
609 AG2 2002-04-28 a clear
609 AG2 1998-07-20 a clear
609 AG2 1998-03-16 a clear
627 AG9 2010-02-24 a9
627 AONOSP 2010-02-19 possession
627 AONSPV 2010-02-24 visit
627 SP AG1 2007-11-01 agreement
627 AONSPV 2010-02-22 visit
我想要每个 id 的前 2 个
id code date desc
609 AG1 2007-11-07 a
609 AG2 2002-11-12 a clear
627 AONOSP 2010-02-19 a9
627 AONSPV 2010-02-24 poessession
最佳答案
在 SQL 2005 及更高版本中,您可以使用 ROW_NUMBER
超过 partition在您感兴趣的分组 ( id
) 上为组中的每一行编号,然后您可以将其滚动到 CTE 或派生表中,然后使用外部查询进行过滤:
SELECT
x.id, x.code, x.date, x.des
FROM
(
SELECT
ROW_NUMBER() OVER (PARTITION BY Id ORDER BY accounts.id) as rownum,
id, code, date, des
FROM accounts
INNER JOIN accdesc
ON accounts.code = accdesc.act_cd
) x -- Derived Table
WHERE
rownum <= 2; -- How many rows of each group
请注意,您需要对订购发表意见(
ORDER
BY 是强制性的)
关于sql - 如何在SQL Server中选择每个id组的前2个,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7689415/