2017-08-07 242 views
-4

我正在努力滿足查詢需求。 我有,有一個表+/-這種結構選擇最小值和最大值日期及其相鄰列

RowNo Event  Cty  Ctry  Arrival    Departure 
    1  LL  Cty_B Ctry_B 2017-07-04 06:00:00 2017-07-04 06:30:00 
    2  LL  Cty_A Ctry_A 2017-07-04 07:00:00 2017-07-04 07:30:00 

我從這個需要什麼,是

RowNo Event  Cty  Ctry  Arrival    Departure 
    1  LL  Cty_B Ctry_B 2017-07-04 06:00:00 2017-07-04 07:30:00 

非常基本塞入你可能會說,但我不能找到一個解決方案

如果我使用GROUP BY,我不能包含Cty和Ctry,因爲這會導致兩個不同的記錄。 如果我使用MIN或MAX適用於Cty和Ctry,在這個例子中MIN會給我錯誤的數據,因爲它選擇字母順序「Cty_A」,而你們中的一些人可能會說「Use MAX Then」但問題是我不知道Cty和Cry是什麼字母順序,所以如果我使用MAX和Cty_A是在排行榜上,那麼MAX會選擇Cty_B

有什麼想法?

+1

爲什麼RowNo 1?... – Mihai

+1

當然,我不明白的要求,但我不知道爲什麼你會想包括Cty_B和Ctry_B在結果集中,當到達和出發的值( MINs和MAXes)不一定適用於城市和國家。你確定你需要他們嗎? –

+1

您希望記錄1的到達日期和r2的出發日期是否正確? –

回答

0

不知道你的分組列,但我認爲你正在尋找查詢象下面這樣:

Select * from (
    Select *, RowN = Row_Number() over(order by RowNo), 
      MinArrival = min(arrival) over(), 
      MaxDeparture = Max(departure) over() 
     from yourtable) a 
    Where a.RowN = 1 

如果要包括分組列,然後將其包含在RowN爲ROW_NUMBER()OVER(由yourgroupingcolumn順序分區由RowNo),幷包括相同的分區由最小和最大,如果你需要特定組的最小值和最大值

0

看起來好像你想從min RowNo數據並添加最大日期它。

;with cte as --This will return the aggregates you want 
(
select min(RowNo) as RowNo 
    , event 
    , MIN(Arrival) Arrival    
    , MAX(Departure) Departure 
from table 
group by event 
) 
select t.RowNo 
    , c.event 
    , t.Cty 
    , t.Ctry 
    , c.Arrival 
    , c.Departure 
from table t 
join cte c on c.RowNo=t.RowNo 
+0

如果OrderNumber是鏈接而不是開關在我的小組中,但你沒有在問題中說清楚。我不得不認爲這是事件。 – KeithL

相關問題