2016-11-18 1 views
0

Hier ist meine Tabelle:Flag unter der Bedingung

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

ich eine SELECT Aussage möchten, die eine Flagge für das letzte Datum ergänzt, wie folgt aus:

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

Dank

+1

Können Sie uns Ihren aktuellen Abfrageversuch zeigen? – jarlh

Antwort

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

Nicht wirklich sicher, was der "neueste" Zustand ist (letzte "X" Jahre?) Und unter der Annahme, dass "2015" tatsächlich DATE-Werte sind (nicht char), Versuchen Sie:

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

wenn das "Datum" in der Tat eine ganze Zahl ist:

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; 

Hoffe, dass es Sérgio

2

hilft können Sie eine analytical function verwenden, wenn Sie nicht wollen Mach eine Gruppe mit oder mach mit. Sie können dies wahrscheinlich ein wenig konsolidieren, wenn Sie möchten, aber ich finde, dass es durch das Aufteilen von with es offensichtlicher macht, was vor sich geht.

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 

Es gibt noch andere Variationen zum selben Thema, wo Sie das Fenster von date desc bestellen und benutzen row_number() statt max() die Flagge zu bestimmen. Ich könnte mir vorstellen, dass das, was ich gezeigt habe, besser ist, aber nicht sicher, wie viel es wirklich einen Unterschied machen wird. Möglicherweise müssen Sie diese Methode verwenden, wenn Sie Fälle haben, in denen Sie doppelte Höchstdaten haben und wirklich nur eine auswählen müssen.

Verwandte Themen