0

単純なSQLServerクエリがあります。

declare @table table (id int, name nvarchar(5), deleted bit)

insert into @table(id, name, deleted) values(1, 'A1', 0)
insert into @table(id, name, deleted) values(2, 'A1', 0)
insert into @table(id, name, deleted) values(3, 'A1', 0)
insert into @table(id, name, deleted) values(4, 'A1', 1)
insert into @table(id, name, deleted) values(5, 'A2', 0)
insert into @table(id, name, deleted) values(6, 'A2', 0)

select
    max(id) as id,
    name
from @table
where deleted = 0
group by name

行に戻ります

id  |name
--------------
3   |A1
6   |A2

ただし、1つだけを返す必要があります

id  |name
-------------- 
6   |A2

A1の最後の(または最大の)IDが削除されてから。

クエリを修正する方法。

どうもありがとう。

4

2 に答える 2

3

あなたはこのような3番目のセットを持つことができるので:

insert into @table(id, name, deleted) values(7, 'A3', 1)
insert into @table(id, name, deleted) values(8, 'A3', 0)

その名前の最高のIDが削除済みとしてマークされていないため、次のものも返されるようにしたいと思います。

id    name
----  ----
8     A3

次に、このクエリはそれを行う必要があります:

;WITH x AS 
(
  SELECT id, name, deleted, 
    rn = ROW_NUMBER() OVER (PARTITION BY name ORDER BY id DESC)
  FROM @table
)
SELECT id = MAX(id), name 
FROM x
WHERE NOT EXISTS
(
  SELECT 1 FROM x AS x2 
  WHERE name = x.name 
  AND deleted = 1 AND rn = 1
)
GROUP BY name;

特定の名前の行が削除されていない行のみを返したい場合は、少し簡単です。

SELECT id = MAX(id), name
FROM @table AS t
WHERE NOT EXISTS 
(
  SELECT 1 FROM @table 
  WHERE name = t.name AND deleted = 1
)
GROUP BY name;
于 2012-08-15T13:43:02.527 に答える
1

別のアプローチ:http ://www.sqlfiddle.com/#!3 / 697d7 / 5

create table t(id int, name nvarchar(5), deleted bit)

insert into t(id, name, deleted) values(1, 'A1', 0)
insert into t(id, name, deleted) values(2, 'A1', 0)
insert into t(id, name, deleted) values(3, 'A1', 0)
insert into t(id, name, deleted) values(4, 'A1', 1)
insert into t(id, name, deleted) values(5, 'A2', 0)
insert into t(id, name, deleted) values(6, 'A2', 0)


with no_deletions as
(
  select name
  from t
  group by name
  having max(nullif(cast(deleted as int),0)) is null
)
select    
    max(id) as id,
    name    
from t
where name in (select name from no_deletions)
group by name

出力:

| ID | NAME |
-------------
|  6 |   A2 |
于 2012-08-15T13:58:54.347 に答える