2012-07-27 44 views
-4

我有一台美国广播公司筛选表在SQL

Id Date  status 
C01 Jul 3  A 
C02 Jul 5  B 
C03 Jul 9  A 
C02 Jul 9  A 
C05 Jul 3  C 
C02 Jul 3  C 
C03 Jul 12  C 
C05 Jul 13  A 

我想筛选此表 再出把...

Id Date  Status 
C01 Jul 3  A 
C02 Jul 9  A 
C03 Jul 12  C 
C05 Jul 13  A 
+2

**你有什么想要筛选?**什么是条件而定?只是给我们输入和输出,让我们** GUESS **你想要什么不是真正的生产..... – 2012-07-27 16:45:22

+0

过滤状态A与上次修改日期 – kaira 2012-07-27 16:57:00

+0

如果你想这样做,为什么你的产量有一个“C”状态 ?请使用正确的信息和过滤条件编辑您的问题 – 2012-07-27 16:58:37

回答

0

如果group by您的ID和状态,你不会获得预期的产出。你需要让你的max date每个ID,并通过Join

Select T1.Id, T1.Date, T2.Status from 
    (select Id, max(Date) as 'Date' 
    from Abc group by Id) T1 
    INNER JOIN Abc T2 on T1.Id = T2.Id and T1.Date = T2.Date order by Id asc 

的获取状态,如果有二等于dates一个标识可能会失败,但如果你正在寻找的Max这should't发生。 (或者我们需要更多的信息来知道,在这个情况下,这样做)

SE-Data

1

这会做你想要什么,如果你Date列数据类型,日期,而不是一个字符串。

select * 
from 
    (
    select *, 
     row_number() over(partition by Id order by Date desc) as rn 
    from Abc 
) as T 
where T.rn = 1 

SE-Data

+0

+100,如果我可以 - 你怎么从那个OP给我们(和你)的小信息中找出那一个...... – 2012-07-27 17:25:53

+1

@marc_s幸运我猜:)用琴弦试了一下首先提供,当然不起作用。考虑做一些高级的字母数字排序,但没有这样做,因为该列的名称是“日期”,它应**是日期/日期时间。 – 2012-07-27 17:33:15