I have simple SQL Server query:
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
it returns to rows
id |name
--------------
3 |A1
6 |A2
but should return only one
id |name
--------------
6 |A2
since last (or max) id of A1 is deleted.
How to fix my query.
Thanks a lot.
Since you could have a third set like this:
I assume you want the following returned as well, since the highest id for that name was not marked as deleted:
Then this query should do it:
If you only want rows returned where no row for a particular name was ever deleted, then it’s slightly simpler: