2012-11-22 9 views
0

有时候,我想每一个同等价值的只有一行,我ussually做somethingl IKE在此:最短的方式GROUP BY相似的值,并保留最新的行?

SELECT * GROUP BY Text ORDER BY Date DESC 

使用GROUP选择类似的行我的问题是,我不明白,从最新的行中的值在行中(我不太确定选择行的标准是什么)。我只想保留组中最新的一行。

我知道如何用自连接完成它,但是当语句已经非常长时,它似乎有点复杂。有没有更短的方法?也许使用DISTINCT而不是GROUP BY?

+1

如何定义“最新”? “有没有更简单的方法” - nope,'INNER JOIN'嵌套select – zerkms

+2

没有。自加入(或更慢的相关子查询)是正确的方式。 –

+0

Aye会发布类似的东西,给定一个表模式。 –

回答

0

你尝试使用max函数:

SELECT A,B,max(Date) GROUP BY Text 
1

假设你有一个具有多个列,并且其中两个表格是GroupIDDATE。如果你想选择每个GroupID的最新记录,你需要有一个子查询它获取每个GroupID最新Date,例如

SELECT a.*    -- this just selects all records from original table 
FROM tableName a 
     INNER JOIN 
     (
      -- this subquery gets the latest DATE entry for each GROUPID 
      SELECT GroupID, MAX(DATE) maxDate 
      FROM tableName 
      GROUP BY GroupID 
     ) b ON a.GroupID = b.GroupID AND 
       a.Date = b.maxDate 

如果这个答案是不明确的,请不要问:d