這裏是我的表:標誌條件
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
感謝
這裏是我的表:標誌條件
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
感謝
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
不太確定「最近期」情況是什麼(最後「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;
希望它可以幫助 ·塞爾吉奧·
您可以使用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()
,以確定標誌。我可以想象,我所展示的更好,但不知道它會真正有多大的影響。如果您遇到重複的最高日期並且只需要選擇最高日期的情況,則可能需要使用該方法。
你能告訴我們你當前的查詢嘗試嗎? – jarlh