2015-05-14 69 views
2

我有一個公共交通用戶的單獨旅行交易表。
當旅客從一線到另一線過境時,他們會產生兩個不同的交易。
幸運的是,源數據已經包含一個共享密鑰(UniqueTravelID)SQL根據條件組合了多行

Date  | MediumID | UniqueTravelID | CiTime | CoTime | CiLocationID | CoLocationID 
1-1-2015 | 1001  | 99    | 08:10 | 08:15 | 5001   | 5050 
1-1-2015 | 1001  | 99    | 08:16 | 08:20 | 5001   | 5090 

我想基於最早籤和在同一日期最新結帳的時候多個不同的事務結合起來。

Date  | MediumID | UniqueTravelID | CiTime | CoTime | CiLocationID | CoLocationID 
1-1-2015 | 1001  | 99    | 08:10 | 08:20 | 5001   | 5090 
+2

這些代表的旅程的腿。可能的最小值和最大值對於時間來說可能是完美的,但是對於ci/co locationID字段可能不準確 - 對嗎?包括窗口函數在答案中可以幫助解決這個問題。另外,是否有可能一次旅程超過單一日期?即在午夜之前和之後旅行。 – mikey

+0

像這樣的東西在SQL中實際上非常棘手。你不能在應用程序中處理這個嗎? – Luaan

回答

0

我沒有測試過這一點,但...

  1. 創建日期和UniqueTravelID分組視圖識別該日期包括MIN CiTime和MAX CoTime但唯一journies排除地點

  2. 加入視圖與原始表兩次,其中一個鏈接在Min CiTime和UniqueTravelID上,另一個在Max CoTime和UniqueTravelID上,並且應該給你答案。

讓我知道,如果你想了解更多信息

0

我認爲這是你在找什麼

SELECT DISTINCT 
    Date, 
    MediumID, 
    UniqueTravelID, 
    MIN(CiTime) OVER (PARTITION BY Date ORDER BY Date ASC) CiTime, 
    MAX(CoTime) OVER (PARTITION BY Date ORDER BY Date ASC) CoTime, 
    FIRST_VALUE(CiLocationID) OVER (PARTITION BY Date ORDER BY Date ASC) CiLocationID, 
    LAST_VALUE(CoLocationID) OVER (PARTITION BY Date ORDER BY Date ASC) CoLocationID 
FROM 
    table 

在此SQL Fiddler你可以找到一個工作演示。
這隻SQL Server上的作品2012+

希望這有助於