如何选择Min和Next Min并在与相关查询相同的行上显示

时间:2017-03-04 21:50:14

标签: sql sql-server tsql

我使用了这个SQL:

/****** 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 |
+---------+-------------------------+-------------------------+

显然,子查询不相关 - 但我不确定如何将其作为相关子查询

我想要的是下一个最小值 FOR EACH BIKE ID 而不仅仅是表格中的第二个最小值

1 个答案:

答案 0 :(得分:1)

您可以使用row_number执行此操作。

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]