这是我的表:
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
由于
答案 0 :(得分: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()
来确定该标记。我想我展示的那个更好,但不确定它会有多大影响。如果您遇到重复的最大日期并且只需要选择一个日期,则可能需要使用该方法。
答案 1 :(得分: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
答案 2 :(得分: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;
希望它有所帮助 塞尔吉奥