2015-03-11 2 views
4

У меня есть таблица, которая идет как это:Как получить последние данные из ячейки для каждого человека, который удовлетворяет условию?

Name Type Date  Value 
-------------------------------- 
Emilia 1 2010-11-02 10 
Eva  0 2009-07-05 11 
Monica 1 2010-04-22 12 
Emilia 0 2011-07-12 13 
Monica 1 2012-05-01 14 
Eva  1 2006-02-12 15 
Monica 0 2004-12-12 16 
Emilia 1 2005-11-11 17 
Eva  1 2014-02-01 18 
Emilia 1 2015-03-11 19 
Monica 0 2002-11-28 20 

Что мне нужно, чтобы иметь таблицу, которая показывает список всех женщин, которые в последнюю дату имеют тип 1, а значение в этот день. Поэтому таблицы я хочу запросить должен выглядеть следующим образом:

Name Value 
------------ 
Emilia 19 
Eva 18 

Так в основном мне это нужно, чтобы увидеть, что последняя дата для каждого человека, а затем проверить, если тип 1, и если да, то я необходимо отобразить данные из столбца Value.

Пожалуйста, помогите мне, потому что я не знаю, как это сделать.

+1

Не следует значение для Эмилии быть 19? – Sim1

+0

Да, конечно. Спасибо. – Mike

ответ

3

Используйте функцию ROW_NUMBER, чтобы сделать это.

:with CTE as 
(
select *,Row_Number() over(partition by Name order by [Date] desc) RN 
From Yourtable 
) 
select Name,Value from cte 
where RN=1 and Type = 1 
+0

Это работает. Большое спасибо. – Mike

+0

@Mike начните принимать ответ –

+0

@NoDisplayName, я думаю, 'где Type = 1' должен быть внутри CTE. Если последняя строка по дате имеет 0, вы ничего не получите в результате. –

0
declare @t table (name varchar(10),type int,date date, valu int) 

insert into @t(name,type,date,valu)values ('Emilia',1,'2010-11-02',10) 
insert into @t(name,type,date,valu)values ('Emilia',0,'2015-03-11',10) 
insert into @t(name,type,date,valu)values ('Emilia',1,'2015-11-11',19) 
insert into @t(name,type,date,valu)values ('Eva',0,'2006-02-12',10) 
insert into @t(name,type,date,valu)values ('Eva',1,'2014-02-01',20) 

SELECT a.* 
FROM @t a 
INNER JOIN (SELECT type,MAX(date) AS LatestDate FROM @t GROUP BY type)b 
ON a.type = b.type 
AND a.date=b.LatestDate 
Смежные вопросы