我正在努力解决对查询的需求。 我有一个+/-这个结构的表
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
有什么想法吗?
答案 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