2016-11-18 59 views
0

這裏是我的表:標誌條件

key date 
a 2002 
a 2014 
a 2011 
b 2004 
b 2016 
b 2001 

我想一個SELECT聲明中,增加了一個標誌最近的日期,這樣的:

key date flag 
a 2002 0 
a 2014 1 
a 2011 0 
b 2004 0 
b 2016 1 
b 2001 0 

感謝

+1

你能告訴我們你當前的查詢嘗試嗎? – jarlh

回答

0
select t1.*, case when t2.a is null 
        then 0 
        else 1 
      end as flag 
from your_table t1 
left join 
(
    select key, max(date) as mdate 
    from your_table 
    group by key 
) t2 on t1.key = t2.key and t1.date = t2.mdate 
0

不太確定「最近期」情況是什麼(最後「X」年?),並假設「2015」實際上是DATE值(不是char ),嘗試:

select 
t1.key, 
t1.date, 
CASE WHEN DATEDIFF('year', t1.date, CURRENT_DATE) < 2 THEN 1 ELSE 0 END as flag 
from table t1; 

如果 「約會」,其實是一個整數:

select 
t1.key, 
t1.date, 
CASE WHEN EXTRACT(YEAR FROM CURRENT_DATE) - t1.date < 2 THEN 1 ELSE 0 END as flag 
from table t1; 

希望它可以幫助 ·塞爾吉奧·

2

您可以使用analytical function,如果你不想通過或自我加入做一個小組。如果你願意的話,你可以稍微鞏固一點,但是我發現使用with來分解它會讓事情更加明顯。

with max_date_query as (
    select key, date, max(date) over (partition by key) max_date 
    from mytable 
) 
select key, date, case when date = max_date then 1 else 0 end flag 
from max_date_query 

有同一主題,其他的變化,你可以通過date desc命令窗口並使用row_number(),而不是max(),以確定標誌。我可以想象,我所展示的更好,但不知道它會真正有多大的影響。如果您遇到重複的最高日期並且只需要選擇最高日期的情況,則可能需要使用該方法。