2016-08-04 20 views
2

I Datenstruktur haben wie:Wie erkennen, ob bestimmten Wert enthält in MySQL-Tabelle Fenster

id  property_id  status  tran_id  as_of 
1  1    sold  1111   2015-04-01  
2  1    listed  1111   2015-01-05 
3  1    pending  1111   2015-01-02 

7  2    listed  2211   2014-09-01 
8  2    delisted 2211   2014-06-01 
9  2    listed  2211   2014-04-01 
10  2    delisted 2211   2014-01-01 
11  2    sold  2211   2010-01-01 

12  3    sold  6661   2015-08-01  
13  3    pending  6661   2015-04-05 
14  3    listed  6661   2015-04-01 
... 

Was ich will, ist zu erkennen, ob bestimmte Eigenschaft verkauft wurde (das heißt letzten Status, wenn order by as_of asc nicht sold ist). Also, für meinen Fall wird Eigentum 1 und 3 verkauft und 2 ist nicht. Ich weiß, wie es mit OVER() und PARTITION BY() von MS SQL Server zu tun, aber jetzt arbeite ich mit MySQL und ich bin völlig darauf fest (ich kenne nicht MySQL sowie MSSQL).

Antwort

2

Sie können den letzten Status für jede Eigenschaft erhalten, indem Sie:

select t.*, 
     (case when status = 'sold' then 1 else 0 end) as is_sold 
from t 
where t.as_of = (select max(t2.as_of) 
       from t t2 
       where t2.property_id = t.property_id 
       ); 

Wenn Sie eine große Menge von Daten haben, dann wird ein Index auf t(property_id, date) empfohlen.

+0

Danke, mit kleinen Anpassungen ist diese Abfrage, was ich suche! –

+0

Und die Anpassungen waren? –

+0

Ich denke, die OPs Spalte war 'as_of' wo, wie diese Abfrage 'date' @juergend – e4c5