2017-03-04 50 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