在过去几个小时(子查询,CTE,派生表的左连接)的答案中,我在SO上看起来很高,但这些问题都没有达到我的标准。
我有一个包含这样数据的表:
COL1 COL2 COL3
1 A 0
2 A 1
3 A 1
4 B 0
5 B 0
6 B 0
7 B 0
8 B 1
其中column1 1是primary key
并且是int
。第2列为nvarchar(max)
,第3列为int
。我已经确定使用此查询:
select name, COUNT(name) as 'count'
FROM [dbo].[AppConfig]
group by Name
having COUNT(name) > 3
只有当C列出现次数超过3次时,我才能返回“A,B和C”的总计数。我现在正在尝试删除在第3列的初始值之后出现的所有行。我提供的示例表现在看起来像这样:
COL1 COL2 COL3
1 A 0
2 A 1
4 B 0
8 B 1
有人可以帮助我吗?
答案 0 :(得分:0)
这应该有效:
;WITH numbered_rows as (
SELECT
Col1,
Col2,
Col3,
ROW_NUMBER() OVER(PARTITION BY Col2, Col3 ORDER BY Col3) as row
FROM AppConfig)
SELECT
Col1,
Col2,
Col3
FROM numbered_rows
WHERE row = 1
答案 1 :(得分:0)
如果您想要的只是ColB-ColC组合的第一行,则以下内容将执行此操作:
select min(id) as id, colB, colC
from tbl
group by colB, colC
order by id
答案 2 :(得分:0)
SELECT DISTINCT MIN(COL1) AS COL1,COL2,COL3
FROM TABLE
GROUP BY COL2,COL3
ORDER BY COL1