2015-11-11 60 views
0

我有表:查詢到組數據

id | Name | Nick | Points | Date 
1 | John |Batman| 123 |2015-01-01 
2 | John |Batman| 128 |2015-02-23 
3 | John |Batman| 123 |2015-03-30 
4 | John |Batman| 123 |2015-04-21 
5 | John |Batman| 134 |2015-06-01 
6 | John |Batman| 128 |2015-06-12 
7 | John |Batman| 128 |2015-07-09 
8 | John |Batman| 178 |2015-08-11 

我想有輸出:

Name | Nick | Points 
John |Batman| 123  
John |Batman| 128  
John |Batman| 123  
John |Batman| 134  
John |Batman| 128  
John |Batman| 178  

當我查詢:

Select Name, Nick, Points 
from table 
group by Name, Nick, Points 

我有輸出:

Name | Nick | Points 
John |Batman| 123  
John |Batman| 128  
John |Batman| 134  
John |Batman| 178  

我正在使用MSSQL2012(tsql)。

+1

你應該解釋你如何到達期望的輸出 –

+0

查看'LAG'功能 –

+0

請記住,只要沒有指定ORDER BY,結果就是無序的 – jarlh

回答

0

它看起來像你想保持點序列在一起。您可以使用行數的差異(或使用lag()做到這一點:

select name, nick, points, min(date), max(date) 
from (select t.*, 
      (row_number() over (partition by name, nick order by date) - 
       row_number() over (partition by name, nick, points order by date) 
      ) as grp 
     from table t 
    ) t 
group by name, nick, points, grp; 

對於你的輸出,其中不包括日期,另一種方法只使用lag()

select t.* 
from (select t.*, 
      lag(points) over (partition by name, nick order by date) as prev_points 
     from table t 
    ) t 
where prev_points is null or prev_points <> points; 
+0

Lag()它是我想要的 - 這是工作。Thx – Bart

+1

@Bart如果它適合你,那麼你應該接受答案。 – MAK