2014-12-25 39 views
-1

與關閉我有一個表中的SQL以這種形式:如何讓所有的行不同,其具有今天日期

id  Name  Date 
---------------------------- 
1  john  04/05/2014 
2  andi  12/05/2014 
3  mark  05/08/2014 
4  sofie  05/11/2014 
5  john  12/12/2014 
5  mark  15/12/2014 

,我想選擇在這個表單數據「獨特」

id  Name  Date 
--------------------------- 
1  john  12/12/2014 
2  mark  15/12/2014 
3  andi  12/05/2014 
+0

哪個DBMS? MySQL?你想要不同的名字? –

+0

SQL服務器2008 –

+1

@JetmirMorina,在**什麼標準**你會排除'sofie'從輸出? 'mark'和'andi'如何切換ID?這提出了更多的疑問,而不是它的答案,而且必須真正澄清(不是英語問題!) –

回答

0

看起來你可能想

SELECT name, MAX(date) 
FROM table 
GROUP BY name 

不過,從你的例子是不可能推斷出在什麼準則您會排除sofie (以及重複id在你的例子中是什麼意思表 - id通常用於表示唯一標識符)。

1

試試這個:

-- sample data 
create table #tbl (id int, name nvarchar(20), [date] date); 
insert into #tbl (id, name, [date]) values 
(1, 'john', '2014-05-04'), 
(2, 'andi', '2014-05-12'), 
(3, 'mark', '2014-08-05'), 
(4, 'sofie', '2014-11-05'), 
(5, 'john', '2014-12-12'), 
(5, 'mark', '2014-12-15'); 

-- solution 
with ranked as 
(
    select id, name, [date] 
    , row_number() over(partition by name order by datediff(day, [date], getdate())) [rank] 
    from #tbl 
) 
select id, name, [date] from ranked where [rank] = 1; 

-- cleanup 
drop table #tbl; 

結果

ID NAME DATE 
---------------------- 
2 andi 2014-05-12 
5 john 2014-12-12 
5 mark 2014-12-15 
4 sofie 2014-11-05 

此解決方案按名稱對原始數據集進行排名,並且在有相同名稱的情況下按照從今天到[日期]之間的天數進行排名。因此,結果數據集由具有唯一名稱的行和具有[日期]與今天最接近的名稱的行組成。

檢查SQLFiddle

1

嘗試類似:

SELECT t1.* 
FROM <table_name> t1 
WHERE t1.date = (SELECT MAX(t2.date) 
      FROM <table_name> t2 
      WHERE t2.name = t1.name) 
相關問題