2017-03-04 5 views
0

と同じ行の両方を表示してください:どのように私は私がこのSQLを使用Minと次分を選択し、相関クエリ

/****** Select Min and Next Min with Bike ID ******/ 
SELECT 
t.[bike_id] 
,min(t.[start_date]) as Min_Date 
,(SELECT min([start_date]) From trip Where [start_date] > (SELECT min([start_date]) From trip)) as Next_Min_Date 
FROM [dbo].[trip] t 
Group By t.[bike_id] 
Having t.[bike_id] < '15' 

をし、この結果得た:

+---------+-------------------------+-------------------------+ 
| bike_id | Min_Date    | Next_Min_Date   | 
+---------+-------------------------+-------------------------+ 
| 9  | 2013-08-29 12:02:00.000 | 2013-08-29 09:24:00.000 | 
| 10  | 2013-09-01 13:47:00.000 | 2013-08-29 09:24:00.000 | 
| 11  | 2013-08-29 20:11:00.000 | 2013-08-29 09:24:00.000 | 
| 12  | 2013-08-30 17:15:00.000 | 2013-08-29 09:24:00.000 | 
| 13  | 2013-08-29 10:13:00.000 | 2013-08-29 09:24:00.000 | 
| 14  | 2013-08-31 11:55:00.000 | 2013-08-29 09:24:00.000 | 
+---------+-------------------------+-------------------------+ 

明らかにサブクエリを相関関係はありませんが、これを相関サブクエリにする方法がわかりません

次の最小値はです。各バイクIDはで、2番目の最小値だけではありませんあなたがこれを行うにはrow_numberを使用することができます

答えて

1

BLE。

select [bike_id], 
max(case when rnum=1 then t.[start_date] end) as min_date, 
max(case when rnum=2 then t.[start_date] end) as next_min_date 
from (
SELECT 
t.*,row_number() over(partition by t.[bike_id] order by t.[start_date]) as rnum 
FROM [dbo].[trip] t 
) x 
group by [bike_id] 
+0

ありがとうございました - だから私はこれを試してみました、それが働きました。すばらしいです!あなたは、あなたのコードの/ Partition bitについて説明するいくつかのリソースを教えてください。私はこれを見て、将来の人々のためのあなたの答えのうち、それらすべてを取らなければならなかったので、参考までに、それはマルチパート識別子についてかなり不満を... – kiltannen

+0

あなたはどのように**オーバー(パーティション**一部について説明したリソースを知っていますあなたのselect文は、私は、コードのこの作品は、実際にどのように動作するかを理解したい?取り組んでいる:) – kiltannen

+0

ドキュメントはhttps://msdn.microsoft.com/en-us/library/ms186734.aspxを開始するには良い場所です –