在SQL Server查询中复制MS Access"First"函数

Fra*_*mar 6 sql-server ms-access

我是SQL Server的新手,所以我现在道歉.

我有一个表,我想要GroupBy field1并返回field2counted字段中具有最高关联计数的记录.我通常在MS ACCESS中使用2个查询执行此操作,第一个查询以降序返回数据,第二个查询使用First()函数选择第一个记录,如下所示: -

查询1

SELECT t.field1, t.field2, Count(t.counted) AS count1
FROM Table1 AS t
WHERE (((t.counted)=2))
GROUP BY t.field1, t.field2
ORDER BY t.field1, Count(t.counted) DESC;
Run Code Online (Sandbox Code Playgroud)

查询2(基于上面的查询1)

SELECT q.field1, First(q.field2) AS firstoffield2
FROM q
GROUP BY q.field1;
Run Code Online (Sandbox Code Playgroud)

我正在寻找SOURCE DATA和查询结果

我很难在SQL Server 2008查询中尝试完成与上述相同的结果.有人可以帮忙吗?(请提供我需要使用的精确SQL).

以下是数据的子集和结果示例: -

表格1

field1 ¦ field2 ¦ counted
10     ¦ 20     ¦ 2
10     ¦ 30     ¦ 2
10     ¦ 20     ¦ 2
20     ¦ 30     ¦ 0
20     ¦ 40     ¦ 0
20     ¦ 50     ¦ 1
20     ¦ 50     ¦ 2
20     ¦ 60     ¦ 1
Run Code Online (Sandbox Code Playgroud)

Query1结果(按字段1分组,计算"计数"字段记录为"2"的位置)

field1 ¦ field2 ¦ count1
10     ¦ 20     ¦ 2
10     ¦ 30     ¦ 1
20     ¦ 50     ¦ 1
Run Code Online (Sandbox Code Playgroud)

查询2结果(我希望从SQL获得的输出)

field1 ¦ firstoffield2
10     ¦ 20
20     ¦ 50
Run Code Online (Sandbox Code Playgroud)

我希望有点帮助,谢谢你们.

Mat*_*lie 6

WITH
  q AS
(
  Put your query one here
)
,
  sequenced AS
(
  SELECT
    ROW_NUMBER() OVER (PARTITION BY field1 ORDER BY count1 DESC) AS sequence_id,
    *
  FROM
    q
)
SELECT
  *
FROM
  sequenced
WHERE
  sequence_id = 1
Run Code Online (Sandbox Code Playgroud)

要将其更改为LAST(),请更改ROW_NUMBER()函数中的顺序方向.