SQL Fiddle: http://sqlfiddle.com/#!3/9b459/6
I have a table that answers the question, βWill you take part in this event?β Each user can answer several times, and all answers are stored in a table. Usually we are only interested in the last answer, and I try to build an effective query for it. I am using SQL Server 2008 R2.
Table contents for one event:

Column types: int, int, datetime, bit
Primary key: (EventId, MemberId, Timestamp)
Note that Participant 18 first answered No and later Yes, participant 20 answered Yes first and later No, participant 11 answered No and later No again. I would like to filter these answers first. In addition, there can be more than one answer that needs to be filtered out - the user can, for example, answer Yes, Yes, No, Yes, No, No, No.
SQL Server Management Studio, , Display Estimated Execution Plan . ?
, :
select distinct a.EventId, a.MemberId,
(
select top 1 Answer
from Attendees
where EventId = a.EventId
and MemberId = a.MemberId
order by Timestamp desc
) as Answer
from Attendees a
where a.EventId = 68
select a.EventId, a.MemberId, a.Timestamp, a.Answer
from Attendees a
where a.EventId = 68
and a.Timestamp =
(
select max(Timestamp)
from Attendees
where EventId = a.EventId
and MemberId = a.MemberId
)
order by a.TimeStamp;
select a.EventId, a.MemberId, max(a.Timestamp),
(
select top 1 Answer
from Attendees
where EventId = a.EventId
and MemberId = a.MemberId
and Timestamp = max(a.Timestamp)
) as Answer
from Attendees a
where a.EventId = 68
group by a.EventId, a.MemberId
order by max(a.TimeStamp);
. group by, "". - , , , SQL:
select a.EventId, a.MemberId, max(a.Timestamp), a.Answer <
from Attendees a
where a.EventId = 68
group by a.EventId, a.MemberId
order by max(a.TimeStamp);
?
EDIT:
SQL Fiddle, :
http://sqlfiddle.com/#!3/9b459/6