在sql中使用cte显示记录

时间:2013-05-13 13:44:38

标签: sql sorting sql-order-by common-table-expression

我的表格如下:

Date                      Name              TypeID
---------------------------------------------------
01/01/2012 01:50          abc                 70
01/01/2012 02:20          bcd                 101
01/01/2012 01:30          abc                 70
01/01/2012 01:55          bcd                 101   
01/01/2012 02:15          abc                 70
01/01/2012 02:15          xyz                 110

现在从这张表中我想得到以下结果。

Date                      Name              TypeID
---------------------------------------------------
01/01/2012 01:30          abc                 70
01/01/2012 01:55          bcd                 101 
01/01/2012 02:15          xyz                 110    
01/01/2012 01:50          abc                 70
01/01/2012 02:15          abc                 70    
01/01/2012 02:20          bcd                 101

我想要这样的记录。意味着我想要使用最新的记录排序顺序,但首先它应该显示所有typeid的剩余记录,然后是排序中的其余记录。

任何人都可以帮助我在sql中使用CTE或其他查询来解决这个问题吗?

1 个答案:

答案 0 :(得分:0)

您没有说明您正在使用的DBMS,但是当您提到CTE时,您还应该有可用的窗口函数:

select date, name, typeId
from (
  select date, -- btw: an awful name for a column 
         name, -- another awful name for a column
         typeId,
         dense_rank() over (partition by name order by date) as rnk
  from the_table
) t
order by rnk, name;