2015-05-14 65 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+

希望这有助于