2017-03-04 111 views
1

我试图做从SF Bay Area Bike Share Kaggel数据集团通过使用T-SQL

数据的一些SQL当我运行该SQL最小值和最大值日期:

/****** Select Bikes ******/ 
SELECT count(t.[id]) as TripCount 
,t.[bike_id] 
FROM [dbo].[trip] t 
Group By t.[bike_id] 
having count(t.[id]) < 25 
Order By TripCount asc 

我得到这样的结果:

+-----------+---------+ 
| TripCount | bike_id | 
+-----------+---------+ 
|   6 |  876 | 
|  18 |  323 | 
|  20 |  565 | 
|  24 |  476 | 
|  24 |  697 | 
+-----------+---------+ 

当我真正想要的是这样的:

+-----------+---------+------------+------------+ 
| TripCount | bike_id | Min_date | Max_date | 
+-----------+---------+------------+------------+ 
|   6 |  876 | 2014-05-22 | 2014-05-27 | 
|  18 |  323 | 2013-08-30 | 2013-09-07 | 
|  20 |  565 | 2013-08-29 | 2013-09-07 | 
|  24 |  476 | 2013-08-29 | 2013-09-07 | 
|  24 |  697 | 2013-10-15 | 2013-12-20 | 
+-----------+---------+------------+------------+ 

其中最小日期&最大日期分别给出第一个&自行车旅行的最后日期。

我可以手动为每个自行车通过运行该这样做:

SELECT 
min(cast([start_date] as date)) as Min_Date 
,max(cast([start_date] as date)) as Max_Date 
,[bike_id] 
FROM [dbo].[trip] 
where bike_id = '697' 
Group By bike_id 

我尝试此查询:

/****** Script for SelectTopNRows command from SSMS ******/ 
SELECT 
count (t.[id]) as TripCount 
,min(cast(t.[start_date] as date)) as Min_Date 
,max(cast(t.[start_date] as date)) as Max_Date 
,[bike_id] 
FROM [dbo].[trip] t 
Group By count (t.[id]), bike_id 

,显然得到了以下错误: 不能使用聚合或用于GROUP BY子句的GROUP BY列表的表达式中的子查询。

就不太清楚如何来包装我解决此头...

+0

THX固定我的表! SE真的应该增加至少在这个社区中使用表的能力! – kiltannen

回答

1

你接近

SELECT 
[bike_id] 
,count (t.[id]) as TripCount 
,min(cast(t.[start_date] as date)) as Min_Date 
,max(cast(t.[start_date] as date)) as Max_Date 
FROM [dbo].[trip] t 
Group By bike_id 
+0

谢谢 - 我的选择顺序为我打破了吗?错误信息COULD可能给我提供了一个更好的线索,我认为... – kiltannen

+1

@kiltannen无需聚合函数(SUM,MAX等)的选择中的列需要添加到GROUP BY中。您在GROUP BY中添加了一个聚合函数,这是选择事件的顺序 – Mihai