选择MIN和MAX Date及其相邻列

时间:2017-08-07 14:33:19

标签: sql sql-server tsql

我正在努力解决对查询的需求。 我有一个+/-这个结构的表

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”,你们中的一些人可能会说“使用MAX然后”但问题是我做的不知道Cty和Cry是什么字母顺序,所以如果我使用MAX和Cty_A在第一行,那么MAX将选择Cty_B

有什么想法吗?

2 个答案:

答案 0 :(得分: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

如果要包含分组列,则将其作为Row_Number()覆盖在RowN中(按RowNo划分分组列顺序),如果需要特定组的最小值和最大值,则以min和max包含相同的分区

答案 1 :(得分:0)

您似乎想要来自最小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